作为练习,我应该找到从我的主目录开始的所有.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
在排序命令之前停止。 出于好奇,为什么会这样?
答案 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
问候!