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工作完美! –