次の形式のログファイルを使用しています。
Oct 12 01:28:26 server program: 192.168.1.105 text for 1.105
Oct 12 01:30:00 server program: 192.168.1.104 text for 1.104
Oct 12 01:30:23 server program: 192.168.1.103 text for 1.103
Oct 12 01:32:39 server program: 192.168.1.101 text for 1.101
Oct 12 02:28:26 server program: 192.168.1.105 text for 1.105
Oct 12 02:30:00 server program: 192.168.1.104 text for 1.104
Oct 12 02:30:23 server program: 192.168.1.103 text for 1.103
Oct 12 02:32:39 server program: 192.168.1.101 text for 1.101
私はこれを達成する必要があります:
Oct 12 02:28:26 server program: 192.168.1.105 text for 1.105
Oct 12 02:30:00 server program: 192.168.1.104 text for 1.104
Oct 12 02:30:23 server program: 192.168.1.103 text for 1.103
Oct 12 02:32:39 server program: 192.168.1.101 text for 1.101
新しい出力をファイルに送信するには?私はこれを試しました:
awk '!_[$6]++ {a=$6} END{print a}' logfile
しかし、期待した結果は出ません。 awk または sed を使用して最後に最後に文字列の一致を見た一意の行のみを提供したり、日付/時刻に基づいて行うにはどうすればよいですか?
ベストアンサー1
2番目のパス(ほとんどが必要です)を実行する予定の場合は、レコード全体ではなく行番号のみを保存できます。ロジックをより簡単にします。
awk 'NR == FNR {if (z[$6]) y[z[$6]]; z[$6] = FNR; next} !(FNR in y)' logfile logfile
精度証明:
各行の処理が終了すると、これまでに処理された各行の数は次のようになります。誰でもz
値またはのインデックス(値ではない)y
(両方ではない)
z
各反復が終了すると、値で表される行は、正確に各 IP アドレスについてこれまでに表示された最新のレコードです。
したがって、のインデックスはy
正確に私たちが望む線です。いいえ印刷。