awkのソートとユニーク

awkのソートとユニーク

「sort」と「uniq」があることを知っていますが、今日の質問はAWKを使用してこの種のタスクを実行する方法です。実際のリスト(ips、名前、または数字)があり、それをソートしたいとしましょう。

以下は、メールログからIP番号を取得する方法の例です。

awk 'match($0,/\[[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\]/) { if ( NF == 8 && $6 == "connect" ) {print substr($0, RSTART+1,RLENGTH-2)} }' maillog

同じawkコマンドで「いつでもどこでも」IPをソートできますか?私の質問に対する完全な答えは必要ありませんが、どこから始めるべきかについていくつかのヒントが必要です。

乾杯!

答え1

ソートするには、次のようにコマンドの内部にパイプを使用することもできますawk

awk '{ print ... | "sort ..." }'

この構文は、データファイルの対応する行がすべて同じソートインスタンスに渡されることを意味します。

もちろん、シェルレベルでも同じことができます。

awk '{ print ... }' | sort ...

awkあるいは、独自に複数のソート機能を定義するGNUを使用することもできます。

これは通常、「固有のデータ要素またはキー」を連想配列に保存し、新しいデータを記憶する必要があることを確認することによって行われますuniqawk説明できる例を見てください。

awk '!a[$0]++'

つまり、現在の行が配列にない場合、条件は true で、その行を印刷する基本ジョブがトリガーされます。同じデータを持つ後続の行でエラー条件が発生し、データは印刷されません。

答え2

二重引用符を使用することは私にとって効果的でした。

substr(a[1],1,5) 印刷 "sort -u" # 一意の値

関連情報