Awk
zgrep 列並列印匹配的文件名
我正在嘗試在 Linux 機器上的數千個 gzip 壓縮文件中匹配特定列的模式,並且基於匹配我想列印文件名如何做到這一點。以下選項對我不起作用,請提供任何建議。謝謝
zgrep 12345 *| awk -F"^" '{if($8==12345) print}' find . -type f |xargs zcat | awk -F"^" '{if($8==12345) print}'
最清晰/最簡單的恕我直言:
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
您的文件名中沒有轉義序列。