我要输出顶部通过查找给定的文件的列表10行AWK命令的, 使用该片段:

$ find . -name "*.txt" -print -exec awk '$9 != ""'  \| head -n10 {} \;

还请注意,我想打印出正在处理的文件名。

但为什么我得到这样的错误:

awk: cmd. line:2: fatal: cannot open file `|' for reading (No such file or directory)
./myfile.txt

什么是应该做的正确方法?

我尝试而不管之前反斜杠。仍然它给了一个错误:

find: missing argument to `-exec'
head: cannot open `{}' for reading: No such file or directory
head: cannot open `;' for reading: No such file or directory
有帮助吗?

解决方案

如果你想在每个文件运行awk程序从发现只打印了前10行的每次的。

$ find . -name "*.txt" -print -exec awk '$9 != "" && n < 10 {print; n++}' {} \;

其他提示

在运行与find的-exec命令,你没有得到所有的很好的外壳之类的管道操作符(|)。如果你喜欢,尽管你可以通过显式运行一个子shell重拾他们,例如:

找到。 -name '*的.txt' -exec / bin / sh的-c “回声}称为{文本文件|头-n 15” \;

根据Ashawley的回答是:

find . -name "*.txt" -print -exec awk '$9 != "" {print; if(NR > 9) exit; }' {} \;

应该有更好的表现,因为我们10日记录之后退出的awk。

使用awk只应该工作:

find . -name "*.txt" -print -exec awk '{if($9!=""&&n<11){print;n++}}' {} \;

您可以这样来做太:

find . -name '*txt' -print -exec awk 'BEGIN {nl=1 ;print FILENAME} $9 !="" {if (nl<11) { print $0 ; nl = nl + 1 }}' {}  \;

而不head

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top