我不能完全得到完全独特的结果 - Linux 流水线

Posted

技术标签:

【中文标题】我不能完全得到完全独特的结果 - Linux 流水线【英文标题】:I can't quite get the results to be fully unique - Linux pipelining 【发布时间】:2021-12-13 17:18:47 【问题描述】:

我快到了...我应该最终得到 340 项独特的服务。到目前为止,我只能降到 341。

这些是我的任务:

    从文件中提取所有服务名称。 按字母顺序对名称进行排序,删除所有重复项。 删除任何空白行或不包含 字母表。 将最终输出捕获到名为“uniqueservices.txt”的文件中。 使用条件命令计算文件中的行数 如果前面的组合命令成功,则执行。

这是我使用的命令:

cat /etc/services | grep -Ev '^#|^$' | cut -f1 | sort -u > uniqueservices.txt && wc -l uniqueservices.txt

这是我应该得到的:

This is what I should get

这是我实际得到的:

What I actually get

我猜有(一如既往)更好的方法可以做到这一点,但是......嘿,我是新手。不过这么近!

提前致谢。

S

【问题讨论】:

【参考方案1】:

您的命令的cut -f1 部分通过扫描制表符分隔符的行来确定“第1 列”的含义。您看到的不匹配行可能只是使用了空格字符。 我想最简单的做法是再次运行cut,但寻找空格而不是制表符。

cat /etc/services | grep -Ev '^#|^$' | cut -f1 | cut -d' ' -f1 | sort -u > uniqueservices.txt && wc -l uniqueservices.txt

【讨论】:

Ahhhhh,很好的@Raxi,非常完美。我只是假设我无法使用与以前相同的命令。谢谢你。我没有足够的代表来支持你......但它是实物。 :) 不用担心。是的,管道实际上是由 shell 处理的,而不是应用程序本身。当您运行单个程序(例如nano /etc/services)时,会创建一个nano 进程,该进程将stdin 连接到您的终端(因此您可以输入内容),而stdout 同样连接到您的终端,因此会将内容打印到您的屏幕上。当您运行cat /etc/services | sort | head -5 时,沿途会创建3 个进程,其中cat 的stdout 简单地连接到sortsorts stdout->heads stdin 和head' 的stdin s stdout 又是你的终端了。

以上是关于我不能完全得到完全独特的结果 - Linux 流水线的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 WPF 中将 BitmapSource 保存为 bmp、jpeg 和 png 时会得到完全不同的结果

如果 ANN 产生完全不同的结果,该怎么办?

linux ping 任何IP得到的from 本机IP

WPF不能正常格式化按钮和文本框

第二章 渲染流水线 (下)

第二章 渲染流水线 (下)