如何使用awk从/ etc / passwd中提取姓氏?

时间:2017-05-02 11:12:04

标签: linux shell awk

例如在/ etc / passwd第5行($ 5)我的名字是" Smith Simon"。我怎样才能提取字符串" Simon"并使用awk存储它?提前谢谢。

3 个答案:

答案 0 :(得分:0)

  

提取字符串“Simon”并存储它

gawk 方法:

firstname=$(awk -F':' '{split($5, s, " "); print s[2]}' /etc/passwd)
echo $firstname
Simon

split($5, s, " ") - 将第5列拆分为以空格分隔的部分

答案 1 :(得分:0)

打印/ etc / passwd中的所有姓氏:

awk -F':' '{sub(/.* /,"",$5);$0=$5}7' /etc/passwd

在输出中:

(empty) -> ''(empty)
first middle last -> last
nickname -> nickname

更多信息可能与此问题有关(或不相关):

我不认为你想从系统保留用户那里得到姓氏。像root或守护进程......

Linux(我看过标签)通常用户ID> 1000,如果您通过useradd创建用户。因此,您只需添加awk -F':' '$2>=1000{sub(.....'即可打印出那些系统用户。

我上面说通常,因为有些POSIX系统定义了500。您可以从/etc/login.defs

中找到值

让awk读取此文件并查找最小用户ID也很容易,然后在/etc/passwd中检查它是否真的需要。

答案 2 :(得分:0)

awk F: '/smith/{print substr($5,7,5)}' /etc/passwd
Simon