0

假设我使用

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

谢谢你的帮助

4

2 回答 2

2
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命令生成的行数。

于 2013-05-31T20:13:10.877 回答
0

awk可以做到这一点。

find [some stuff] | wc -l | awk '$1 > 10 {print "ALERT! Count for " $2 " is greater than 10!"}' > myotherfile.txt

请注意,这将myotherfile.txt在您每次运行命令时覆盖。如果您希望每次运行时都将这些行添加到文件的末尾,请使用>>而不是>.

于 2013-05-31T20:34:12.550 回答