本文是在linux的shell下运行命令和解说:
本文参考了:http://man.linuxde.net/awk
风哥注:awk是一个和C语言一样的语言,和python语言在命令行中的使用一样,都要在允许的命令之前加python等标记。
一、解说-e是启用转义字符
shawn@shawn-ThinkStation-P700:~/桌面$ echo -e "A line 1 \nA Line 2" | awk 'BEGIN{print "Start"} {print} END{print "End"}'
Start
A line 1
A Line 2
End
二、NR=now recode 当前记录数几行号,NF=now field当前字段即本段有几个分离的单词亦即单词数,其中$0表示本行所有单词,而 $1表示本行第一个单词, $2 $3类推。
shawn@shawn-ThinkStation-P700:~/桌面$ echo -e " line1 f2 f3 \n line2 f4 f5 \n line3 f6 f7"| awk '{print "Line No:"<span style="color: #ff00ff;">NR</span>", No of fields:"<span style="color: #ff00ff;">NF</span>, "$0="<span style="color: #ff00ff;">$0</span>, "$1="<span style="color: #ff00ff;">$1</span>, "$2="<span style="color: #ff00ff;">$2</span>, "$3="<span style="color: #ff00ff;">$3}</span>'
<span style="color: #ff00ff;">Line No:</span>1, <span style="color: #ff00ff;">No of fields:</span>3 $0= <span style="color: #ff00ff;">line1 f2 f3</span> $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0= <span style="color: #ff00ff;">line2 f4 f5</span> $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0= <span style="color: #ff00ff;">line3 f6 f7</span> $1=line3 $2=f6 $3=f7
三、NF前面加$表示从后面数,当然NF-1倒过来就是倒数第二个了。
shawn@shawn-ThinkStation-P700:~/桌面$ echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print <span style="color: #ff00ff;">$NF</span>}'
f3
f5
shawn@shawn-ThinkStation-P700:~/桌面$ echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print <span style="color: #ff00ff;">$(NF-1)</span>}'
f2
f4
四、另外注意,awk是对每行进行处理、例如获取文件中每行的第二个和第三个字段:
shawn@shawn-ThinkStation-P700:~/桌面$ awk '{ print $2,$3 }' test.txt
I could
first thing
to save
to spend
I could
words could
save every
I would
五、统计文件中的行数,NR在没一行都会更新一下,所有END里面的NR就是最新的
shawn@shawn-ThinkStation-P700:~/桌面$ awk 'END{print NR}' test.txt
15
六、加法计算,seq是序列sequence的意思、
shawn@shawn-ThinkStation-P700:~/桌面$ seq 5
1
2
3
4
5
shawn@shawn-ThinkStation-P700:~/桌面$ seq 5 | awk 'BEGIN{sum=0;print "总和"} {print $1 "+";sum+=$1} END{print "sum=";print sum}'
总和
1+
2+
3+
4+
5+
sum=
15
七、变量倒入方法,试了一下不把echo加上,此时出现按回车键不结束,
shawn@shawn-ThinkStation-P700:~/桌面$ VAR=520
shawn@shawn-ThinkStation-P700:~/桌面$ echo | awk -v VARIABLE=$VAR '{print VARIABLE}'
520
shawn@shawn-ThinkStation-P700:~/桌面$ var1="aaa"
shawn@shawn-ThinkStation-P700:~/桌面$ var2="bbb"
shawn@shawn-ThinkStation-P700:~/桌面$ echo | awk '{print v1,v2}' v1=$var1 v2=$var2
aaa bbb
八、逻辑与算术运算
shawn@shawn-ThinkStation-P700:~/桌面$ awk 'BEGIN{a=1;b=1; print (a>5 && b<=2),(a>5 || b<=2);}'
0 1
九、匹配正则表达式~,不匹配~!
shawn@shawn-ThinkStation-P700:~/桌面$ awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "OK";}}'
OK