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

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

这些是我的任务:

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

这是我使用的命令:

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

【问题讨论】:

    标签: linux controller pipeline


    【解决方案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 又是你的终端了。
    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多