![]() 来源:编程三分钟 ID:coding3min 作者:小熊爱编程 概述awk 同sed 命令类似,只不过sed 擅长取行,awk 命令擅长取列。(根据了解awk 是一种语言,不过我们只关注他处理文本的功能,用的好的话几乎可以取代excel)原理:一般是遍历一个文件中的每一行,然后分别对文件的每一行进行处理 用法: awk [可选的命令行选项] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }' 文件名 打印某几列$ echo 'I love you' | awk '{print $3 $2 $1}' 我们将字符串 I love you 通过管道传递给awk命令,相当于awk处理一个文件,该文件的内容就是I love you ,默认通过空格作为分隔符(不管列之间有多少个空格都将当作一个空格处理)I love you 就分割成三列了。假如分割符号为 . ,可以这样用$ echo '192.168.1.1' | awk -F "." '{print $2}' 条件过滤我们知道awk的用法是这样的,那么pattern部分怎么用呢? awk [可选的命令行选项] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }' 文件名 $ cat score.txt $2>=90 表示如果当前行的第2列的值大于90则处理当前行,否则不处理。说白了pattern部分是用来从文件中筛选出需要处理的行进行处理的,这部分是空的代表全部处理。pattern部分可以是任何条件表达式的判断结果,例如 >,<,==,>=,<=,!= 同时还可以使用+,-,*,/ 运算与条件表达式相结合的复合表达式,逻辑 &&,||,! 同样也可以使用进来。另外pattern部分还可以使用 /正则/ 选择需要处理的行。判断语句判断语句是写在 pattern{ 命令 } 命令中的,他具备条件过滤一样的作用,同时他也可以让输出更丰富$ awk '{if($2>=90 )print $0}' score.txt BEGIN 定义表头awk [可选的命令行选项] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }' 文件名 使用方法如下: $ awk 'BEGIN{print "姓名 语文 数学 英语"}{printf "%-8s%-5d%-5d%-5d\n",$1,$2,$3,$4}' score.txt 这里要注意,我为了输出格式好看,做了左对齐的操作(%-8s左对齐,宽8位), printf 用法和c++ 类似。不仅可以用来定义表头,还可以做一些变量初始化的工作,例如 $ awk 'BEGIN{OFMT="%.2f";print 1.2567,12E-2}' 这里OFMT是个内置变量,初始化数字输出格式,保留小数点后两位。 END 添加结尾符和BEGIN用法类似 $ echo ok | awk '{print $1}END{print "end"}' 数据计算这个地方我要放大招了!上面的知识点你都记住了吗? $ awk 'BEGIN{print "姓名 语文 数学 英语 总成绩"; \ 因为命令太长,末尾我用 \ 符号换行了。。
有用的内置变量NF:表示当前行有多少个字段,因此 $NF 就代表最后一个字段NR:表示当前处理的是第几行 FILENAME:当前文件名 OFMT:数字输出的格式,默认为%.6g。表示只打印小数点后6 位 $ awk -F ':' '{print NR ") " $1}' demo.txt 内置函数awk定义了很多内置函数,用awk来写shell脚本倒是一个不错的选择,但是大多数我们是用不上的,以下是常用函数 $ echo 1 2 | awk '{print $1+sqrt($2)}' 随机数,先设置种子再随机 rand() 0 <= n < 1,srand([expr]) |将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。 $ echo 1 | awk 'BEGIN{srand()}{print rand()}' 字符串 ![]() 系统常用 ![]() 不常用算数: ![]()
![]() ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:马哥Linux运维,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |