hek2gml's answer包含的关键指针 - 你必须使用逻辑&&
和而非范围 - 但该命令可以在两方面提高效率:
- 对给定输入文件进行短路处理,以便处理在第一行之后停止。
- 传递(通常)所有文件到单个
awk
呼叫,通过终止-exec
初级与+
而非\;
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk '/My Report Title/ { print FILENAME } { nextfile }' {} +
此命令永远只着眼于第1行每个输入文件。
nextfile
是不符合POSIX严格,因此,如果您awk
没有它(GNU awk中,Mawk,和BSD/OSX awk完成 - 不知道AIX),使用(效率较低,因为它必须读取每个文件的所有行):
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk 'FNR == 1 && /My Report Title/ { print FILENAME }' {} +
如果在没有nextfile
,你宁愿放弃awk
一次为每个文件(-exec
终止\;
),如在原有解决方案的尝试(读只有每个fi的第一行乐,但呼吁awk
一次每个文件):
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk '/My Report Title/ { print FILENAME } { exit }' \;
如果你想要的是文件名,为什么与'awk'里面的文件进行搜索? Find的'-print'选项将打印文件名。 – ghoti
它应该是'/我的报告标题/&& NR == 1' – hek2mgl
标题是在第一行,这就是为什么我需要awk。感谢hek2mgl工作完美! –