Bashを使用したログの照合

Bashを使用したログの照合

次のエントリを含むログファイルがあります。

192.168.1.1;query=/etc/security/limits.conf;date=02.03.16
192.168.1.1;query=/etc/security/limits.conf;date=01.06.15
192.168.1.2;query=/etc/security/limits.conf;date=02.03.16
192.168.1.1;query=/etc/security/limits.conf;date=12.07.15
192.168.1.2;query=/etc/security/limits.conf;date=03.01.16
192.168.1.1;query=/etc/security/limits.conf;date=02.11.15

IP ごとに 1 回だけ表示される一意の項目を抽出するだけです。だからそうしなければならない

192.168.1.1;query=/etc/security/limits.conf;date=02.03.16
192.168.1.2;query=/etc/security/limits.conf;date=02.03.16

IP以降は何が起こっても構いません。ログファイルが非常に長いです。組み合わせと言うべきだと思います。ユニーク油注文する。

答え1

日付がmm.dd.yy形式であると仮定

sort -k1,1 -k3.12,3.13nr -k3.6,3.7nr -k3.9,3.10nr -t';' file  |
 sort -k1,1 -u -t';'

192.168.1.1;query=/etc/security/limits.conf;date=02.03.16
192.168.1.2;query=/etc/security/limits.conf;date=03.01.16

IPフィールドに基づいてソートし、日付フィールドを逆順にソートします(したがって、各IPの最新の日付が最初にソートされます)。sort今回は、IPフィールドを介して別のエントリにパイプしますが、-uIPごとに1つのレコードが返されることを指定します。安定した順序を意味するため、-u各IPの最初のレコード(最も最近の日付のレコード)が返されます。

一方、日付がdd.mm.yy形式の場合

sort -k1,1 -k3.12,3.13nr -k3.9,3.10nr -k3.6,3.7nr -t';' file |
sort -k1,1 -u -t';'

192.168.1.1;query=/etc/security/limits.conf;date=02.03.16
192.168.1.2;query=/etc/security/limits.conf;date=02.03.16

関連情報