zgrep 一列並列印符合的檔案名

zgrep 一列並列印符合的檔案名

我正在嘗試匹配 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檔案名稱中沒有轉義序列。

相關內容