
我正在嘗試匹配 Linux 計算機上數千個 gzip 壓縮檔案中特定列的模式,並根據匹配我想列印檔案名稱如何做到這一點。以下選項不適合我,請提出任何建議。謝謝
zgrep 12345 *| awk -F"^" '{if($8==12345) print}'
find . -type f |xargs zcat | awk -F"^" '{if($8==12345) print}'
答案1
最清晰/最簡單的恕我直言是:
while IFS= read -r fname; do
zcat "$fname" | awk -F'^' -v fname="$fname" '$8==12345{print fname, $0}'
done < <(find . -type f)
但也可以選擇從 zgrep 列印檔案名稱並使用 awk 讀取它,這可能更有效(但依賴不包含任何:
s 的檔案名稱):
zgrep -H '12345' * |
awk -F'^' '{fname=$0; sub(/:.*/,"",fname); sub(/[^:]+:/,"")} $8==12345{print fname, $0}'
兩個解決方案都假設您的檔案名稱中沒有換行符,第一個解決方案也假設\t
檔案名稱中沒有轉義序列。