이것답변파일에서 동일한 줄을 삭제하는 몇 가지 좋은 솔루션이 있지만 내 경우에는 중복된 줄에 타임스탬프가 있기 때문에 작동하지 않았습니다.
중복을 결정할 때 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
누르고 반복하면 압축을 풀 수 있습니다 . 터미널에서 마지막 명령을 반복하는 것과 같습니다.:↑