awk命令
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk做大的优势。
awk语法格式:
打印以冒号分隔的第1,2端
[root@test1test]#awk-F':''{print$1,$2}'passwd|head-2 rootx binx #-F指定分隔符(不加默认为空格分隔)
使用自定义字符连接每个段
[root@test1test]#awk-F':''OFS="#"{print$1,$2,$3}'passwd|head-2 root*x*0 bin*x*1
[root@test1test]#awk-F':''{print$1"*"$2"*"$3}'passwd|head-2 root*x*0 bin*x*1
匹配字符或字符串
[root@test1test]#awk'/root/'passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
匹配字符或字符串并输出指定段
[root@test1test]#awk-F':''/root/{print$1,$5}'passwd rootroot operatoroperator
打印行号和列数
[root@test1~]#awk-F':''{printNR":"NF}'passwd 1:7 2:7 #awk内置变量NF(段数)NR(行数)
针对第一段打印匹配字符
[root@test1~]#awk-F':''$1~/oo/{print$1}'passwd root #~模糊匹配==精准匹配
[root@test1~]#awk-F':''$1~/oo/||$3>500{printNR":"$0}'passwd 1:root:x:0:0:root:/root:/bin/bas/MysqLh 23:izabbix:x:501:501::/home/zabbix:/sbin/nologin28374 #$0表示输出整行||或者&&并且><>=<=!===
[root@test1~]#awk-F':''NR<3&&$1=="root"{print$0}'passwd root:x:0:0:root:/root:/bin/bas/MysqLh
打印第7段的值为3+4并用#号连接
[root@test1~]#awk-F':''OFS="#",$7=$3+$4{print$0}'passwd root#x#0#0#root#/root#0 bin#x#1#1#bin#/bin#2 daemon#x#2#2#daemon#/sbin#4
打印第三列的累加值
[root@test1~]#awk-F':''{(sum=sum+$3)};END{printsum}'passwd 2046
awk中使用if关键词
[root@test1~]#awk-F':''{if($1=="root")print$0}'passwd root:x:0:0:root:/root:/bin/bas/MysqLh