假设我使用
find
(一些东西)| wc -l
然后我有输出
14 file1.txt
29 file2.txt
32 file3.txt
1 tile4.txt
我对 Bash 脚本完全陌生,但我想要发生的是我可以在命令之后立即使用这个输出来写入另一个文件。例如,如果计数大于 10,我想写入"ALERT! Count for file#.txt is greater than 10!"
.myotherfile.txt
谢谢你的帮助
假设我使用
find
(一些东西)| wc -l
然后我有输出
14 file1.txt
29 file2.txt
32 file3.txt
1 tile4.txt
我对 Bash 脚本完全陌生,但我想要发生的是我可以在命令之后立即使用这个输出来写入另一个文件。例如,如果计数大于 10,我想写入"ALERT! Count for file#.txt is greater than 10!"
.myotherfile.txt
谢谢你的帮助
find ... -exec wc -l {} + |
while read count file
do
if [ $count -gt 10 ]
then echo "ALERT! Count for $file is $count" >>myotherfile.txt
fi
done
残留问题是管道中的缓冲;没有简单的方法可以阻止这种情况。的使用>> myotherfile.txt
部分是为了解决这个问题。在某些方面,在整个循环上使用重定向会更简单(done > myotherfile.txt
没有>>
重定向),但会有更多这样的缓冲。
请注意,您建议的管道:
find ... | wc -l
不会计算每个文件中的行数;它只会计算find
命令生成的行数。
awk
可以做到这一点。
find [some stuff] | wc -l | awk '$1 > 10 {print "ALERT! Count for " $2 " is greater than 10!"}' > myotherfile.txt
请注意,这将myotherfile.txt
在您每次运行命令时覆盖。如果您希望每次运行时都将这些行添加到文件的末尾,请使用>>
而不是>
.