AWKコンテストは定期的に開催されます。列がソートされていません。

AWKコンテストは定期的に開催されます。列がソートされていません。

しばらくこの問題を解決しようとしてきました。このウェブサイトを発見し、狂ったようにグーグルをしました。誰でも助けていただければ幸いです。

ヘッダーと列のないいくつかのログファイルがあちこちにあります。これは、src = 4.2.2.2などのエントリがファイルのどこにでも存在できることを意味します。ファイル内のすべてのオブジェクトはSomething = xxx形式を持ちます。

ログの例:

src=1.1.1.1 sport=12312 dport=80 メッセージ=ハッキング

dport=443 src=2.2.2.2 メッセージ=null スポーツ=32432

メッセージ=クリーンdport=21移動=43434 src=3.3.3.3

match()関数を使用しましたが、複数のフィールドを抽出しようとしています。

gawk 'match($0, "src=([^ ]+)") { print substr($0, RSTART, RLENGTH) } ' ファイル

私に以下を提供します:

ソース=1.1.1.1

ソース=2.2.2.2

ソース=3.3.3.3

出力が次のようにソートされるように、src、dport、messageなどのいくつかのフィールドが必要です。

src=1.1.1.1 dport=80 message=ハッカー攻撃

src=2.2.2.2 dport=443 メッセージ=null

src=3.3.3.3 dport=21 メッセージ=クリーン

gawkなどを使ってこれを行うことはできますか?

ありがとうございます!

ベストアンサー1

GNU awkを使用する(注:「キー」文字列の語彙ソート順によって異なります):

gawk '{split($0,a); asort(a); printf("%s\t%s\t%s\n", a[4], a[1], a[2])}' file
src=1.1.1.1     dport=80        message=hacked
src=2.2.2.2     dport=443       message=null
src=3.3.3.3     dport=21        message=clean

おすすめ記事