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당 한 번만 나타나는 고유 항목을 추출하면 됩니다. 그래서 그래야 한다

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당 하나의 레코드가 반환되도록 지정합니다. 안정적인 순서를 의미 하므로 -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

관련 정보