迅维网

在awk命令表达式中运用NF、NR和$0变量

zjmanager 2017-10-13 08:50


在awk命令表达式中运用NF、NR和$0变量

  为了方便awk编程,awk中还引入了一个叫NF的变量。如果在命令表达式中运用没有$符号的NF变量,这个变量将显示一行记录中有多少个字段。如果运用带有$符号的NF变量,这个变量将显示一行记录中最后一个字段。

  例如,可以运用下列组合命令列出who命令显示结果中每一行的字段数(列数)
goddog@ubuntu:~$ who | awk '{ print NF }'
5
  我们可以运用who命令验证一下。从下面的显示结果可知awk命令是将空白符号当作字段的分隔符的:
goddog@ubuntu:~$ who
goddog tty7 2017-04-22 13:37 (:0)


在awk命令表达式中运用NF、NR和$0变量

  如果在第1个例子中的NF之前加上$符号,结果会怎么样呢?

goddog@ubuntu:~$ who | awk '{ print $NF }'
(:0)
  结果显示确实已经变成了who命令结果的最后一个字段。还记得昨天分享的“知道哪些用户在登录时运用的shell是存放在/bin目录中以及这个shell的名字”的例子,可以利用NF变量完成相似的工作。在这个组合命令中,egrep命令从/etc/passwd文件中抽取包含bin或sbin的数据行,之后将grep命令的结果通过管道送给awk命令。awk命令把冒号看成字段的分隔符并将列出每一行的最后一个字段。之后再将awk命令的结果通过管道送给sort命令进行排序并继续后面的操作。注意:命令的最后要加上| sort -n,才能按数字排序:
goddog@ubuntu:~$ egrep 'bin|sbin' /etc/passwd | awk -F: '{ print $NF }' | sort | uniq -c | sort -n
1 /bin/sync
2 /bin/bash
16 /usr/sbin/nologin
23 /bin/false
  与NF变量相似,awk命令还引入了另一个变量NR,这个变量用来追踪所显示的数据行的数目,即显示数据行的编号。因此,可以利用NR变量运用下列命令获得root加目录下wolf子目录中的文件总数并为每个文件和目录编号:
root@promote:~# ls -l ~/wolf | awk '{ print NR": "$0}'
1: 总用量 8
2: -rw-r--r-- 1 root root 84 1月 23 21:47 delete_disable
3: -rw-r--r-- 1 root root 0 1月 23 21:41 disable_babygirl.wolf
  在下例中运用了$0变量,即第0个字段,在这里$0变量表示整个数据行。现在想列出现在系统上的所有用户并想在每个记录的最前面显示这个用户登录Linux系统所运用的计算机,命令如下:
goddog@ubuntu:~$ who | awk '{ print $6": "$0}'
: goddog tty7 2017-04-22 13:37 (:0)
  巧妙地运用NF、NR、$0变量可以大大减小shell编程的复杂程度。



雷人

握手

鲜花

鸡蛋

路过
收藏
来自: 今日头条
返回顶部
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索