为什么"... >> out | sort -n -o out"实际上没有运行排序?



作为练习,我应该从我的主目录开始,计算每个文件的行,然后将排序的输出存储在sorted_statistics.txt中,使用查找,wc,cut,cut cut广告排序。我发现此命令工作

find /home/user/ -type f -name "*.c" 2> /dev/null -exec wc -l {} ; | cut -f 1 -d " " | sort -n -o sorted_statistics.txt

,但我不明白为什么

find /home/user/ -type f -name "*.c" 2> /dev/null -exec wc -l {} ; | cut -f 1 -d " " >> sorted_statistics.txt | sort -n sorted_statistics.txt

停在 sort 命令之前。出于好奇,为什么是?

您将所有内容附加到sorted_statistics.txt(消耗所有输出),然后试图将无现有输出在管道中进行排序。我已经更正了您的代码,因此现在可以工作。

find /home/user/ -type f -name "*.c" 2> /dev/null -exec wc -l {} ; | cut -f 1 -d " " >> tmp.txt && sort -n tmp.txt > sorted_statistics.txt

问候!

命令的这一部分没有任何意义:

cut -f 1 -d " " >> sorted_statistics.txt | sort ...

因为 cut 的输出附加到文件 sorted_statistics.txt ,并且根本没有输出均已到 sort 命令。您可能要使用 TEE

cut -f 1 -d " " | tee -a sorted_statistics.txt | sort ...

TEE 命令将其输入发送到文件,也将其输入发送到标准输出。这就像管道中的TEE交界处。

最新更新