grepを使用し、awkコマンドを使用して唯一のエントリを見つけます。

grepを使用し、awkコマンドを使用して唯一のエントリを見つけます。

grepを使用してawkを使用して一意のエントリを見つけると、その値がファイルに表示される回数とファイル名も取得できますか?

私はこれを試しました:

zgrep '2020-04-20|12345|' FILENAME_* |awk -F '|' '{print $2 "|" $3 "|" $4}' | sort | uniq -c

ファイルの列2、3、4には一意の項目が表示されますが、その項目を含むファイルの名前を知りたいです。どうすればいいですか?

ベストアンサー1

~のため圧縮されていないそして圧縮ファイルを確認して、以下を試してください。

for f in FILENAME_*; do
    zcat -f "$f" | awk '/2020-04-20\|12345\|/ {rec=$2 "|" $3 "|" $4; a[rec]+=1}  
         END {for (rec in a) print FILENAME " : " rec " : " a[rec]}'
done  > output.txt

簡単な説明:

  • まず、ワイルドカード(*)を使用して可能なすべてのファイル名を繰り返します。
  • 入力ファイルを解凍するにはzcat -f <filename>(参照12...)必要に応じてすぐに実行できます(-fオプション)。
  • zcat -f <filename> | awk ...ファイルの解凍出力を$f入力として使用しますawk
  • 見つかったパターンごとに解析されたレコードの値が見つかるたびに、相関係数の2020-04-20|12345|配列が増加します。a$2 | $3 | $4awk
  • ENDファイル(チャンク)と関連配列recの各コンポーネントの解析が完了すると、接続はaファイル名「FILENAME」、rec$2 | $3 | $4、およびその値が発生した回数を印刷しますa[rec]
  • awk現在処理されているファイル「FILENAME」の名前など、いくつかの便利な内部変数を使用できるようにします。
  • forループの連続出力への単一のリダイレクトはoutput.txt完全にオプションです。抑制するとstdout

=====================================

正解は編集する@AdminBee、@roaima、@dave_thompson、および@kusalanandaの有用なコメントに基づいて改善されました。

おすすめ記事