diffnest / myblog

0 stars 0 forks source link

AWK 小记 #11

Open diffnest opened 6 years ago

diffnest commented 6 years ago

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

1.字段分割符
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语句
必须用在{}中,且比较内容用()扩起来
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语句
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.内置变量
ARGC        命令行参数个数
FILENAME    当前输入文档的名称
FNR         当前输入文档的当前记录编号,尤其当有多个输入文档时有用
NR          输入流的当前记录编号
NF          当前记录的字段个数
FS          字段分隔符
OFS         输出字段分隔符,默认为空格
ORS         输出记录分隔符,默认为换行符\n
RS          输入记录分隔符,默认为换行符\n
5.简单操作运算符
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