使用 `cut` 从 /etc/passwd 中提取列表

使用 `cut` 从 /etc/passwd 中提取列表

如何使用该cut命令从文件中提取用户名和登录 shell 列表/etc/passwd,其中生成的用户名和登录 shell 由单个空格分隔?

使用登录 shell 作为主键,使用用户名作为辅助键,按字母升序对结果列表进行排序。将结果存储在新创建的文件中~/usershells.txt

这是我尝试的命令:

cut -d /etc/passwd -k7 -k1 | sort > ~/usershells.txt

答案1

cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2,2d -k 1,1d

这将使用字典排序将字段 2 作为主键进行排序,将字段 1 作为辅助键进行排序。

如果您想切换列,只需使用 awk:

cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2,2d -k 1,1d | awk '{print $2,$1}'

这建议使用 awk 来获取:

awk -F ":" '{print $7,$1}' /etc/passwd | sort -k 2,2d -k 1,1d

这不是使用 cut,但不确定使用 cut 的要求对您来说有多难。

如果您根本不想使用 awk,您仍然可以切换列顺序。
下面是一个使用 while 循环和 read 的示例:

cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2,2d -k 1,1d | while read -r c1 c2;do echo "$c2 $c1";done

使用“剪切和粘贴”的另一种选择:

paste <(cut -f7 -d: /etc/passwd) <(cut -f1 -d: /etc/passwd) | sort -k 2,2d -k 1,1d

或者,如果单个空格是硬性要求:

paste -d " " <(cut -f7 -d: /etc/passwd) <(cut -f1 -d: /etc/passwd) | sort -k 2,2d -k 1,1d

只需使用 > ~/usershells.txt 将列出的任何选项重定向到文件

当然,您仍然可以使用剪切和粘贴来保持原始顺序并仍然在外壳上排序:

paste -d " " <(cut -f1 -d: /etc/passwd) <(cut -f7 -d: /etc/passwd) | sort -k 2,2d -k 1,1d > ~/usershells.txt

答案2

对于排序,您不必使用cut,只需使用sortwith管道:

sort -t " " -k 7 /etc/password |  sort -t " " -k 1

管道顺序确保登录 shell 将用作主键,用户名将用作辅助键。

-t " "将用作space分隔符。

要仅显示两列,请使用cut(排序后):

sort -t " " -k 7 /etc/password |  sort -t " " -k 1 | cut -f 1,7 -d:

最后您可以将输出保存在文件中usershells.txt

sort -t " " -k 7 /etc/password |  sort -t " " -k 1 | cut -f 1,7 -d: > ~/usershells.txt

如果您的默认分隔符是:您可以tr使用丹尼_l提到:

tr ":" " " /etc/password |  sort -t " " -k 7| sort -t " " -k 1 | cut -f 1,7 -d: > ~/usershells.txt

答案3

参数 f 允许您选择字段,d 设置分隔符是什么

 cut -f 1,7 -d: /etc/passwd

答案4

cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort > ~/usershells.txt

相关内容