AWK 小记

最近一直在处理一些文本数据,复习了一些awk相关知识,顺便记录一下!

1.字段分割符
1
2
3
4
5
awk -F: '{print $2}' /etc/passwd
awk 'BEGIN {FS = ":"} {print $1}' /etc/passwd
echo 'hello the:word,!' | awk 'BEGIN {FS="[:, ]"} {print $1,$2,$3,$4}'//多字段分割
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR==5 || NR==6{print}' /etc/passwd //显示第5行和第6行
2.IF语句
1
2
3
4
必须用在{}中,且比较内容用()扩起来
awk -F: '{if($1~/mail/) print $1}' /etc/passwd //简写
awk -F: '{if($1~/mail/) {print $1}}' /etc/passwd //全写
awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd //if...else...
3.IF ELSE语句
1
2
awk '{ if ($2 >= 90 && $2 <= 100) {print $1,"A"} else if ($2 >= 80 && $2 < 90) {print $1,"B"} else if ($2 >= 70 && $2 < 80) {print $1,"C"} else if ($2 >= 60 && $2 < 70) {print $1,"D"} else {print $1,"E"} }' cj
awk '{if (1513148221-$4 < 86400 * 30) $4=30; else if (1513148221-$4 >= 86400 * 30 && 1513148221-$4 <= 86400 * 60) $4=60 ; else if (1513148221-$4 >= 86400 * 60 && 1513148221-$4 <= 86400 * 90) $4=90;else if (1513148221-$4 > 86400 * 90 )$4=91;print}' jf.src > /tmp/wdk
4.内置变量
1
2
3
4
5
6
7
8
9
ARGC        命令行参数个数
FILENAME 当前输入文档的名称
FNR 当前输入文档的当前记录编号,尤其当有多个输入文档时有用
NR 输入流的当前记录编号
NF 当前记录的字段个数
FS 字段分隔符
OFS 输出字段分隔符,默认为空格
ORS 输出记录分隔符,默认为换行符\n
RS 输入记录分隔符,默认为换行符\n
5.简单操作运算符
1
2
3
echo "test" | awk 'x=2 {print x+3}'
echo "test" | awk 'x=2,y=3 {print x*2, y*3}'
awk -F: '$3>500 {print $1}' /etc/passwd
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!