本文共 1902 字,大约阅读时间需要 6 分钟。
awk的基本⽤法
awk是报告⽣成器,格式化⽂本输出,有多种版本。centos中的是gawk即GNU awk版本。
awk⼯作原理:
第⼀步:执⾏BEGIN{action;...}语句块中的语句。第⼆步:从⽂件或标准输⼊(stdin)读取⼀⾏,然后执⾏pattern{action;...}语句块,它逐⾏扫描⽂件,从第⼀⾏到最后⼀⾏重复这个过程,直到⽂件全部被读取完毕。第三步:当读⾄输⼊流末尾时,执⾏END{action;...}语句块。BEGIN语句块在awk开始从输⼊流中读取⾏之前被执⾏,这是⼀个可选的语句块,⽐如变量初始化、打印输出表格的表头等语句通常可写咋BEGIN语句块中。END语句块在awk从输⼊流中读完所有的⾏之后被执⾏,⽐如打印所有⾏的分析结果这类信息汇总都是在END语句块中完成,它也是⼀个可选语句块。pattern语句块中的通⽤命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执⾏{print},即打印每⼀个读取到的⾏,awk读取的每⼀⾏都会执⾏该语句块。print格式:print item1, item2, ...注意:
逗号分隔符;输出的各item可以是字符串,也可是数值;当前记录的字段、变量或awk的表达式;如省略item,相当于print $0。awk基本⽤法
awk [options] 'program' var=value file ...
awk [options] -f programfile var=value file ... awk [options] 'BEGIN{ action;...} pattern{ action;... } END{ action;... }' file ...awk程序通常由:BEGIN语句块、能够使⽤模式匹配的通⽤语句块、END语句块等三部分组成。program通常是被单引号或双引号括起来。选项:-F:指明输⼊时⽤到的字段分隔符;-v var=value:⾃定义变量。基本格式:
awk [options] 'program' fileprogram:表⽰为pattern{action statements;...}pattern:表⽰部分决定动作语句何时触发及触发事件BEGIN、END;action statements:表⽰对数据进⾏处理,放置{}内指明print、printf。分隔符、域和记录:awk执⾏时,由分隔符的字段(域)标记$1,$2...$n称为域标识。$0为所有域,注意:和shell中变量$符含义不同;⽂件的每⼀⾏称为记录;省略action,则默认执⾏print $0的操作。[root@magedu ~]# head -10 /etc/passwd > awktest.txt
解释:生成需要的测试数据 【例1】awk省略action,默认执⾏print $0[root@CentOS7 17chapter]#awk '{print}' awktest.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync
例2】指定:(冒号)为分隔符,打印每⾏记录的第⼀个字段即输出$1
awk -F: '{print $1}' awktest.txt
root bin daemon adm lp sync
例3】取出磁盘使⽤率
[root@localhost ~]# df |grep "^/dev"|awk '{print $5}' 24% 19% 100%awk的变量⽤法
内置变量:FS:输⼊⾃动分隔符,默认为空⽩字符;OFS:输出⾃动分隔符,默认为空⽩字符;RS:输⼊记录分隔符,指定输⼊时的换⾏符,原换⾏符仍有效;ORS:输出记录分隔符,输出时⽤指定符号代替换⾏符;NF:字段数量;NR:⾏号;(以记录分隔符为标准)FNR:各⽂件分别计数,记录号;FILENAME:当前⽂件名;ARGC:命令⾏参数的个数;转载于:https://blog.51cto.com/14231434/2398170