cut 的 -d 和 -f 选项的含义是什么

cut 的 -d 和 -f 选项的含义是什么

如何解释这条管道:

cat /etc/passwd | cut -d : -f 9 2>&1 | sort | uniq 2>&1 | wc -l

我正在自学Unix,但我不太明白。这里是什么cut -d : -f 7 2>&1意思?

答案1

cut -d : -f 9 2>&1

这是一个单独的 Unix 风格命令,在更大的上下文中,是管道的一部分。您可以通过整个命令的“|”来判断这一点其中的人物。

您从左到右阅读 Unix 风格的命令行。实际的可执行文件(或别名)将是cut.参数为cut“-d : -f 9”,整个命令的 stderr 输出通过“2>&1”重定向到 stdout。

作为 Unix 或 Linux 命令行用户所需的技能之一是如何查找命令及其语法。所以,跑吧man cut。这为我们提供了“手册页”,这是有关如何调用该命令的简短手册。接收其标准输入上的输入(由整个命令中的cut管道提供)。cat它将其输入视为字符分隔的列,每个记录有一些数字,其中记录是一行。它“剪切”每行的某些列,并将这些列(只是字符串)放在其标准输出上,该标准输出将输入sort到您的示例中。

Unix 风格的命令经常(但并非总是)使用“-”字符或“--”字符串来标记命令行的特殊部分。 '-d' 表示使用下一个字符作为列分隔符,即“:”、冒号。 '-f' 表示从输入行中删除第 9 列,并将该字符串打印到标准输出上。

输出重定向短语2>&1的 shell 设置整个管道,将错误消息(通常打印在文件描述符 2 上)发送到与文件描述符 1(也称为 stdout)相同的位置,即到sort.

总的来说,管道做了一件常见的事情:计算文件中唯一字符串的数量。cat /etc/passwd将文件“/etc/passwd”的内容(定义用户 ID 特征的著名 Unix/Linux/*BSD 文件)放在其标准输出上。

删除cut了第 9 列,该列在我的系统上不存在。我们假设它是“用户 ID”的数字形式。用户 ID(或其他)的字符串表示形式进入sort,它没有选项。sort在这种情况下,将按词汇顺序重新排序其输入行,但这并不重要,因为我们追求的是重复或唯一的用户 ID。

sort将其输出发送到uniq.uniq没有任何标志,只监视标准输入上输入的每一行。如果该行在词法上与之前的行相同,则它不执行任何操作,否则,它会打印该行。由于输入是按词法排序的,这意味着uniq只打印唯一的行。任何重复的内容都不会被打印。

wc接收的输入uniq。使用“-l”标志,wc仅打印其接收的行数。因此:用户 ID 的唯一值的数量(或 /etc/passwd 的第 9 列中的任何内容)。

只需要较小的 mod,您就可以使该管道计算重复的用户 ID(或其他)。uniq -c不仅打印唯一的行,它还会打印连续行数的计数。您可以通过管道将其输入awk '{if ($2 > 1) {print $0}}以仅获取计数大于 1 的行(即重复行)。wc -l只会计算重复的行。

相关内容