通过Find命令在AWK上应用Unix头

时间:2009-04-02 06:53:34

标签: linux unix find awk head

我想在find给出的文件列表中输出前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

5 个答案:

答案 0 :(得分:4)

当使用find的-exec运行命令时,你不会得到像管道运算符(|)这样的所有漂亮的shell。如果您愿意,可以通过显式运行子shell重新获得它们,例如:

找到。 -name'* .txt'-exec / bin / sh -c“echo一个名为{}的文本文件| head -n 15”\;

答案 1 :(得分:3)

如果你想在find的每个文件上运行一个awk程序,每次只打印前10行

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

答案 2 :(得分:2)

根据Ashawley的回答:

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

它应该表现得更好,因为我们在第10条记录之后退出awk。

答案 3 :(得分:1)

你也可以这样做:

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

没有head

答案 4 :(得分:1)

只能使用awk

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