次のエントリを含むログファイルがあります。
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フィールドを介して別のエントリにパイプしますが、-u
IPごとに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