AWK
一、NF $NF
$NF 代表:最后一个列(field)
NF 代表:浏览记录的域个数
ls -l |awk '/^d/ {print $NF}'
查看当前目录下的所有目录文件
[root@lee1 opt]# cat a 1.2.3.4.5 [root@lee1 opt]# awk -F . '{print NF}' a 5
二、FS OFS
FS 输入字段分隔符(缺省为:space:),相当于-F选项
OFS输出字段分隔符(缺省为:space:)
[root@lee1 opt]# cat a 1.2.3.4.5 [root@lee1 opt]# awk -F . '{print NF}' a 5 [root@lee1 opt]# awk -F . 'BEGIN {OFS="/"}{NF=5;print $0}' a 1/2/3/4/5
三、AWK匹配
有这样需求:需要提取一个zip包中文件所在的目录,就是文件所在的上层目录的绝对路径
比如 a/b/c.sh c.sh文件的路径就是 a/b
zip包的内容如下 :
unzip -l game.zip |awk '/game\//&& !/\/$/ {print $4}' | awk -F / 'BEGIN {OFS="/"}{NF=NF-1;print $0}'
awk中的匹配段的内容意思是:找到有“game/” 且不以“/” 结尾的行
查看结果:
四 数组
awk的数组,一种关联数组,下标可以是数字和字符串。因无需对数组名和元素提前声明,也无需指定元素个数
有这样的需求:有两列数据,第一列为用户名,第二列为数值,计算出总值,并按第二列的值排序
[root@lee1~]#cat a a 1 b 11 c 123 a 2 v 3 c 245 b 235 [root@lee1~]#awk '{name[$1]+=$2} END{for(i in name) { if(name[i] != null)print i , name[i]}}' a | sort -n -k2 -r c 368 b 246 v 3 a 3