awk命令根据分隔符输出

一、选项参数说明

awk是一种处理文本文件的语言,我们可以使用awk --help查看一下它的选项参数,如下:

259b3d3da724e5db43eddc2db48cd9e3.png

二、基本用法

1、行匹配语句,此处awk后只能跟单引号,格式如下:

awk '{匹配的内容}' 匹配的文件名称

例如:

现有如下测试文件test:

03aa724b9d940d1cbc901ecf5baa3eb3.png

使用如下命令输出文中每行的1、4项内容:

awk '{print $1,$4}' test

d9dbe93485c7966c001b3c28f997f365.png

也可以添加如下内容使其格式化输出:

awk '{printf "%-8s %-10s\n",$1,$4}' test

3d2227a1903944fc68a92abe8767cbfa.png

2、指定分隔符

awk '{printf "%-8s %-10s\n",$1,$4}' test

例如:

有如下test文件:

abab95f78915a132b618bd91c25204d4.png

执行如下命令,使用逗号分割输出每行的第一、二项内容:

awk -F, '{print $1,$2}' test

a34100c80c9842d3d9d0e5d2a9f604e3.png

也可以使用内建变量,格式如下:

awk 'BEGIN{FS=","} {print $1,$2}' test

64068e934d70a45660b15ef6c7511d41.png

对于使用多个分隔符,首先使用空格分割,然后再使用其他分割符进行分割:

awk -F '[ ,]' '{print $1,$2,$4}' test

9406aa3a7cd62e259a67061477661551.png

3、设置变量

awk -v

例如:

现有如下数据:

0b008242d38a69d7454877238110f45f.png

执行如下命令,每行第一项加1:

awk -va=1 '{print $1,$1+a}' test

4f3d4f66e98a3b6c0386ef2f968fd681.png

也可以使用如下命令设置多个变量:

awk -va=1 -vb=s '{print $1,$1+a,$1b}' test

b8d09c2868cbfcf9b7007ef20939496a.png

4、通过awk脚本来运行awk命令

awk -f awk脚本 文件名

例如:

awk -f file.awk test

三、运算符

f9d8fe437ee35601c4ded2d3b6e227fc.png

例如:

1、过滤第一列大于2的行

awk '$1>2' test

af7f95e088c0e939b02e2b1277d403ac.png

2、过滤等于2的列

awk '$1==2 {print $1,$3}' test

2547cf3272c1b76bdfe4fe1ea761de63.png

3、过滤第一列大于2并且第二列等于Are的行

awk '$1>2 && $2=="Are" {print $1,$2,$3}' test

四、内建变量

21b7f3417c6f7c6f6e5b6607a90b4c62.png

例如:

awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' test

593addc6f3abc0a16ef27dd84dd4feb1.png

awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' test

ff5da034bce548baa936acea4087d16a.png

awk '{print NR,FNR,$1,$2,$3}' test

86c72719c40e7316890212642ac2c26f.png

awk '{print $1,$2,$5}' OFS=" $ " test

efebee9a22c05f757f5fc86627aa7b51.png

五、使用正则,字符串匹配

例如:

1、输出第二列包含“th”并打印第二列与第四列。

awk '$2 ~ /th/ {print $2,$4}' test

d76d1fea3cd76f81176e9911aba616b2.png

~表示模式开始,//中存放匹配的模式。

2、输出包含“re”的行

awk '/re/ ' test

6b06b708284e57d1b8783376e560abf3.png

六、忽略大小写

awk 'BEGIN{IGNORECASE=1} /this/' test

d6045359595782414cb7bbc888f1fb6c.png

七、模式取反

awk '$2 !~ /th/ {print $2,$4}' test

8e06841bbc8ff28d33a9145e76c2dee8.png

awk '!/th/ {print $2,$4}' test

8bbc6605ad5951482660969e4ab201d2.png

八、awk脚本

关于awk脚本,需要注意BEGIN和END两个关键词:

(1)BEGIN{存放执行前的语句};

(2)END{存放处理完所有的行后要执行的语句}。

例如:

现有数据如下:

a4f493d3c6f1de08c67acc6dc60cb718.png

我们的awk脚本内容如下:

bf22e885f4f2b88f4a5655753ec20a9d.png

执行结果如下:

f2bdd728bb577e751654575eb21a9dc3.png

 

posted @ 2023-02-22 10:57  zhuguoqing  阅读(419)  评论(0编辑  收藏  举报