我想在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
答案 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++}}' {} \;