awk用法
Posted elsearch
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk用法相关的知识,希望对你有一定的参考价值。
目前虽然有很多工具可以代替awk,但是呢我还是认为awk还是非常重要,比如有时候load数据到hive,mysql发现数据有点问题,这样可以先对比文件和库中数据是否一致,这样awk就发挥用处了,还有从文本中统计一些简单的数据,awk可是信手拈来。在这也简单的介绍下awk的用法。
awk命令格式与选项
awk [options] ‘script‘ var=value file(s) awk [options] -f scriptfile var=value file(s)
常用命令选项:
-F fs 指定分隔符,可以是字符串和正则表达式
-v var=value 赋值一个用户定义变量,将外部变量传递给
awk -f scripfile 从脚本文件中读取awk命令
-m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
awk基本结构
awk ‘BEGIN{ print "start" } pattern{ commands } END{ print "end" }‘ file
这块主要是要理解执行原理,这块理解透彻了,对一个编程的人来说,就变得简单多了。
第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。
BEGIN语句是在awk在读取文本之前被执行,是可选模块,一般是用来写变量初始化,打印表头等语句
END语句是在awk读取文本之后被执行,也是可选模块,一般用来做所有行的汇总,如sum之类的。
pattern 读取的文本的每一行,如果没有此模块,会默认打印读取的每一行。
如下:
echo "hello word"|awk ‘BEGIN{print"beging--"}{print}END{print "end--"}‘ beging-- hello word end--
当不带参数的print,它会打印当前行,和print $0一样,print 打印后面用逗号,打印出结果已空格分离,awk中双引号是当做连接使用。
echo|awk ‘{var="a";var1="b";print var,var1;}‘ a b
以上是关于awk用法的主要内容,如果未能解决你的问题,请参考以下文章