【1.1.3】awk命令

版权声明:版权所有,翻版必究【Kevin】 https://blog.csdn.net/weixin_30935137/article/details/84494633

awk脚本基本结构

awk 'BEGIN{print "start"} pattern {commands} END{print "ends"}' file 

#执行过程
awk 'BEGIN {commands} pattern{commands}END{commands}' filename

[1]第一步:执行BEGIN{commands} 语句块中的语句;

[2]第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{commands}语句块,它逐行扫描文件,第一行到最后一行重复这个过程,直到文件全部被读取完毕;

[3]第三步:当读至输入流末尾时候,执行END{commands}语句块

常用格式

awk [-F field-separator] 'commands' inputfile

其他参数
$0:表示整个当前行
NF:每行行的字段数
NR:每行的记录号
OFS:输出字段分隔符


按指定分隔符分割并提取所有字段

[wujiadong@localhost test]$ awk -F"\t" '{print $0}' test.txt 
wu	M	23	JX	20181111
LIU	F	22	XA	20151213
JIANG	M	33	AH	20161121

提取指定字段列

#中间加逗号,字段使用空格分割
[wujiadong@localhost test]$ awk -F"\t" '{print $1,$2}' test.txt 
wu M
LIU F
JIANG M

#中间没有逗号,字段相连输出不分割
[wujiadong@localhost test]$ awk -F"\t" '{print $1 $2}' test.txt 
wuM
LIUF
JIANGM

加入表头并提取指定字段

[wujiadong@localhost test]$ awk -F"\t" 'BEGIN {print "name gender"} {print $1,$2}' test.txt 
name gender
wu M
LIU F
JIANG M

根据条件筛选行

#输出第一行
iadong@localhost test]$ awk -F'\t' 'NR==1{print $0}' test.txt
wu	M	23	JX	20181111

#输出第一行和第三行
[wujiadong@localhost test]$ awk -F'\t' 'NR==1||NR==3{print $0}' test.txt
wu	M	23	JX	20181111
JIANG	M	33	AH	20161121

#带行号输出
[wujiadong@localhost test]$ awk -F'\t' 'NR==1||NR==3{print NR, $0}' test.txt
1 wu	M	23	JX	20181111
3 JIANG	M	33	AH	20161121

#输出字段数
[wujiadong@localhost test]$ awk -F'\t' 'NR==1||NR==3{print NR,NF,$0}' test.txt
1 5 wu	M	23	JX	20181111
3 5 JIANG	M	33	AH	20161121

#不输出第一行
[wujiadong@localhost test]$ awk -F'\t' 'NR!=1{print $0}' test.txt
LIU	F	22	XA	20151213
JIANG	M	33	AH	20161121

#输出偶数行
[wujiadong@localhost test]$ awk -F'\t' '{if(NR%2==0)print $0}' test.txt
LIU	F	22	XA	20151213

#输出奇数行
[wujiadong@localhost test]$ awk -F'\t' '{if(NR%2==1)print $0}' test.txt
wu	M	23	JX	20181111
JIANG	M	33	AH	20161121

#保留第一行并输出偶数行
[wujiadong@localhost test]$ awk -F'\t' 'NR==1||NR%2==0{print $0}' test.txt
wu	M	23	JX	20181111
LIU	F	22	XA	20151213

#输出时指定分隔符
[wujiadong@localhost test]$ awk -F'\t' 'BEGIN{OFS=";"} NR==1||NR%2==0 {print $1,$2}' test.txt
wu;M
LIU;F

猜你喜欢

转载自blog.csdn.net/weixin_30935137/article/details/84494633