迅维网

字段分隔符标志-F的用法

xinhua668 2017-10-13 08:50


  还记得Linux系统的口令文件吗?在这个文件中,所有的字段都是以:分隔的。有时可能只想知道某些用户登录时运用的shell,可以运用下列组合命令。在这个组合命令中,egrep命令从 /etc/passwd 文件中抽取包含goddog的数据行,之后将egrep命令的结果通过管道送给awk命令。awk命令把冒号看成字段的分隔符并将列出第1个(用户名)和第7个字段(登录时的shell),同时还将在显示结果中加入一些描述信息以帮助阅读和理解。

goddog@ubuntu:~$ egrep 'goddog' /etc/passwd | awk -F: '{ print $1 " has "$7" as loggin shell." }'
goddog has /bin/bash as loggin shell.
  如果有一天,boss问你现在咱们公司Linux系统上最流行的shell是哪个?有多少人在运用这个shell?现在你就完全不用调查所有的用户了,命令如下:
goddog@ubuntu:~$ awk -F: '{ print $7 }' /etc/passwd | sort | uniq -c
2 /bin/bash
23 /bin/false
1 /bin/sync
16 /usr/sbin/nologin


在awk命令中指定字段的分隔符

  如果想知道哪些用户在登录时是存放在/bin 目录中以及这个shell的名字,命令如下:
goddog@ubuntu:~$ grep /bin/ /etc/passwd | awk -F: '{ print $1" "$7 }'
root /bin/bash
sync /bin/sync
……
  可是在上例中有一个名为sync的用户运用的是 /bin/sync使用程序。你不想让他出现在显示结果中,于是,你对命令进行了修改,将以上命令的结果通过管道送给sed命令,并由sed命令删除所有包含sync字符串的数据行。命令如下:
goddog@ubuntu:~$ grep /bin/ /etc/passwd | awk -F: '{ print $1" "$7 }' | sed '/sync/d'
root /bin/bash
systemd-network /bin/false
……
  虽然去掉了sync用户的数据行,但是显示结果却没有了顺序,因此可以将这个结果通过管道送给sort命令进行排序,命令如下:
goddog@ubuntu:~$ grep /bin/ /etc/passwd | awk -F: '{ print $1 " " $7 }' | sed '/sync/d' | sort
_apt /bin/false
avahi-autoipd /bin/false
……
  以上所有例子告诉我们这样一个事实,那就是编程并不需要一步到位,而是一步步加以完善的。开发大型软件也是一样,许多软件在刚刚发行时,bugs满天飞,但是厂家照样卖,然后是一边卖一边改进。

在awk命令中指定字段的分隔符



雷人

握手

鲜花

鸡蛋

路过
收藏
来自: 今日头条
关闭

站长提醒 上一条 /1 下一条

返回顶部
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索