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

AWK Sed Sync Ubuntu Linux系統學習 2017-04-27

字段分隔符標誌-F的用法

還記得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命令中指定字段的分隔符


今天就分享這麼多了,謝謝欣賞!^_~

相關推薦

推薦中...