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

时间:2017-11-28 16:48:04

标签: bash find cut

作为练习,我应该找到从我的主目录开始的所有.c文件,计算每个文件的行并使用find,wc,cut ad sort将已排序的输出存储在sorted_statistics.txt中。 我发现这个命令可以工作

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

排序命令之前停止。 出于好奇,为什么会这样?

2 个答案:

答案 0 :(得分:1)

这部分命令毫无意义:

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连接点。

答案 1 :(得分:1)

您将所有内容附加到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

问候!