Linux下面,如果要处理格式化的文本数据,awk算是利器了,一般bash + awk 能写出神一般的处理程序,如果对awk还没有一点认识的,那么先
man awk
详细看完这个简单的教程。
简单的说,awk是一个简单的动态解释性脚本语言,数值比较,控制流,循环,数组,这些语法基本上和C语言一样,所以我只需要了解awk独特的地方就行了。
awk是按行和列来处理输入,简单地说awk是按照table的样式处理数据,就像我们excel数据一样。
有如下的测试数据:
It hurts to love someone and not
But what is more painful is to love someone
and never find the courage to let that
awk解析数据为表格格式:
|It |hurts |to |love |someone |and |not
|But |what |is |more |painful |is |to |love |someone
|and |never |find |the |courage |to |let |that
同时保存测试数据为 test.txt
我们来点实例:
假如只输出第二列数据,可以在控制台中:
cat test.txt|awk '{print $1}'
或者
awk '{print $1}' < test.txt
输出:
hurts
what
never
这里只是展示了awk在命令行下的运用,在命令行下
执行 awk 'expression' ,其中 expression 就是awk的语句,上面的例子只是简单的输出,awk还可以在开始读入数据的前后,做一些处理,例如:
cat test.txt|awk 'BEGIN {print "--START--"} {print $0} END { print "--END--"}'
输出:
--START--
It hurts to love someone and not
But what is more painful is to love someone
and never find the courage to let that
--END--
这里的 BEGIN 和 END 是awk的特殊语法
大家看到这里可能就应该知道awk脚本几个特殊的地方,比如上文种出现的 $0 ,$2,还有print,这些代表什么含义,上文我们说了awk的按行和列处理数据的,所以这里的 $ 是变量前缀,$0 代表整行,$1,代表第一个字段,也就是按照分割符的第一列数据,$2,$3...类推,这些都是awk内嵌变量。
参考:
http://www.grymoire.com/Unix/Awk.html