타임스탬프가 포함된 파일에서 중복된 줄을 제거합니다.

타임스탬프가 포함된 파일에서 중복된 줄을 제거합니다.

이것답변파일에서 동일한 줄을 삭제하는 몇 가지 좋은 솔루션이 있지만 내 경우에는 중복된 줄에 타임스탬프가 있기 때문에 작동하지 않았습니다.

중복을 결정할 때 awk에게 줄의 처음 26자를 무시하도록 지시할 수 있습니까?

예:

[Fri Oct 31 20:27:05 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:10 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:13 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:16 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:21 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:22 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:23 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:24 2014] The Brown Cow Jumped Over The Moon

될 것입니다

[Fri Oct 31 20:27:24 2014] The Brown Cow Jumped Over The Moon

(가장 최근 타임스탬프를 유지하세요)

답변1

uniq해당 옵션을 사용할 수 있습니다 -f.

uniq -f 4 input.txt

에서 man uniq:

  -f, --skip-fields=N
       avoid comparing the first N fields

실제로 이것은 첫 번째 줄을 표시합니다.

[Fri Oct 31 20:27:05 2014] The Brown Cow Jumped Over The Moon

이것이 문제라면 다음과 같이 할 수 있습니다.

tac input.txt | uniq -f 4

또는 그렇지 않지만 귀하 의 지원이 tac있는 경우 :tail-r

tail -r input.txt | uniq -f 4

답변2

awk '!seen[substr($0,27)]++' file

답변3

이 시도:

awk -F ']' '{a[$2]=$1}END{for(i in a){print a[i]"]"i}}'

답변4

사용할 수 있는 권한 vim:

:g/part of duplicate string/d

너무 쉽게. 더 많은 파일이 있는 경우(예: gzipped회전log)를 실행하면 사전 압축 해제 없이 파일이 열리며, 마지막 명령을 vim누르고 반복하면 압축을 풀 수 있습니다 . 터미널에서 마지막 명령을 반복하는 것과 같습니다.:

관련 정보