Linux中awk工具的使用详解( 三 )


awk 内置 NF 变量表示每一行的列数
$ awk '{print NF "\t" $0}' fruit.txt5peach100Mar1997China5Lemon150Jan1986America5Pear240Mar1990Janpan5avocado120Feb2008china

Linux中awk工具的使用详解

文章插图
awk 中 $NF 变量的使用
$ awk '{print $NF}' fruit.txtChinaAmericaJanpanchina
上面这个$NF就表示每一行的最后一列,因为 NF 表示一行的总列数,在这个文件里表示有 5 列,然后在其前面加上$符号,就变成了$5,表示第 5 列
$ awk '{print $(NF - 1)}' fruit.txt1997198619902008
上面$(NF-1)表示倒数第 2 列,$(NF-2)表示倒数第 3 列,依次类推 。
现在除了刚才说的有一个 fruit.txt 文件之外,我们又多了一个新文件叫 .txt 内容如下
yahoo100 4500google150 7500apple180 8000twitter 120 5000
我们用 fruit.txt 和 .txt 两个文件来向你演示 awk 同时处理多个文件的时候有什么效果
$ awk '{print FILENAME "\t" $0}' fruit.txt company.txtfruit.txtpeach100Mar1997Chinafruit.txtLemon150Jan1986Americafruit.txtPear240Mar1990Janpanfruit.txtavocado120Feb2008chinacompany.txtyahoo100 4500company.txtgoogle150 7500company.txtapple180 8000company.txttwitter 120 5000
当你使用 awk 同时处理多个文件的时候,它会将多个文件合并处理,变量就表示当前文本行所在的文件名称 。
看到这里是不是感觉 awk 命令的使用方法真的是简单到爆炸,现在不要太高兴,请举起你的双手跟我一起摇摆 。。。哦,不对!请拿起你的双手在电脑上试一试上面这些例子 。你会知道我没有骗你,因为讲了这么多,傻子都会了 。。。—_—
BEGIN 关键字的使用
在脚本代码段前面使用 BEGIN 关键字时,它会在开始读取一个文件之前,运行一次 BEGIN 关键字后面的脚本代码段,BEGIN 后面的脚本代码段只会执行一次,执行完之后 awk 程序就会退出
$ awk 'BEGIN {print "Start read file"}' /etc/passwdStart read file
awk 脚本中可以用多个花括号来执行多个脚本代码,就像下面这样
$ awk 'BEGIN {print "Start read file"} {print $0}' /etc/passwdStart read fileroot: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/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologin