awk的使用

借此机会学习一下awk的使用。
awk的命令形式是:

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

实际上就是对file文件中的每一行执行awk后面的那一串处理。因为awk是按行处理文件的。除此之外,我发现awk还是比较适合用来处理那种像下面的mytxt内容的文件,就是那种分成几行,几列的文件,每行都用分隔符分开,下面的mytxt使用的是使用空格当作分隔符。

  1. ‘{print $0}’ file
[zhang@zwfedora23 testbash]$ cat mytxt 
zhangzha 35 male married 176cm 75kg
other 33 famle ok 165cm 60kg
computer 11 it single 100cm 50kg
[zhang@zwfedora23 testbash]$ 

其实,print后面的$0表示打印file文件的整个内容,还可以换成其他参数,如

[zhang@zwfedora23 testbash]$ awk '{print $1}' mytxt 
zhangzha
other
computer
[zhang@zwfedora23 testbash]$ awk '{print $2}' mytxt 
35
33
11
[zhang@zwfedora23 testbash]$ awk '{print $3}' mytxt 
male
famle
it
[zhang@zwfedora23 testbash]$ awk '{print $4}' mytxt 
married
ok
single
[zhang@zwfedora23 testbash]$ awk '{print $5}' mytxt 
176cm
165cm
100cm

可见,print后面的那个参数$,表示的第几个段,这里默认的字符分隔符是空格。
我又修改了一下mytxt的内容,用来验证-F的使用

[zhang@zwfedora23 testbash]$ cat mytxt 
zhangzha 35 male married 176cm 75kg
other 33 famle ok 165cm 60kg
computer 11 it single 100cm 50kg
are:you:ok:ma?
[zhang@zwfedora23 testbash]$ 
[zhang@zwfedora23 testbash]$ awk -F: '{print $1}' mytxt 
zhangzha 35 male married 176cm 75kg
other 33 famle ok 165cm 60kg
computer 11 it single 100cm 50kg
are
[zhang@zwfedora23 testbash]$ 

可以看到,当使用-F来指定分隔符后,只有最后一行中带有冒号的被识别出来了,前面的几行由于没有冒号,所以就当作是一整个没有分隔符的字符串处理了。
还有一点,就是-F可以指定多个分隔符,这样就可以识别一个文件中的多个分隔符了:

[zhang@zwfedora23 testbash]$ awk -F'[: ]' '{print $1,$3,$6}' mytxt
zhangzha male 75kg
other famle 60kg
computer it 50kg
are ok 
[zhang@zwfedora23 testbash]$ 

可见,不管是前3行的分隔符是空格,还是最后一行的冒号,都可以识别出来了。

OFS输出分隔符,是用来控制输出数据是使用什么来分割的

[zhang@zwfedora23 testbash]$ awk -F: '{print $1,$3,$6}' OFS="\t" mytxt
zhangzha 35 male married 176cm 75kg
other 33 famle ok 165cm 60kg
computer 11 it single 100cm 50kg
are     ok
[zhang@zwfedora23 testbash]$ awk -F: '{print $1,$3,$6}' OFS="--" mytxt
zhangzha 35 male married 176cm 75kg----
other 33 famle ok 165cm 60kg----
computer 11 it single 100cm 50kg----
are--ok--
[zhang@zwfedora23 testbash]$ 

-f 是用来指定awk脚本的。具体的用法为:

awk -f script.awk file

其中,script.awk的内容为:

BEGIN{
FS=":"
}
{print $1}
[zhang@zwfedora23 testbash]$ awk -f script.awk mytxt 
zhangzha 35 male married 176cm 75kg
other 33 famle ok 165cm 60kg
computer 11 it single 100cm 50kg
are
[zhang@zwfedora23 testbash]$ 

可见,它输出的结果是只识别出了最后一行中的冒号,符合预期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值