Awk

zgrep 列並列印匹配的文件名

  • September 24, 2020

我正在嘗試在 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您的文件名中沒有轉義序列。

引用自:https://unix.stackexchange.com/questions/611201