source

Bash 스크립트에서 중복 항목 제거

nicesource 2023. 4. 24. 23:28
반응형

Bash 스크립트에서 중복 항목 제거

텍스트 파일에서 중복된 항목을 제거합니다. 예:

kavitha= Tue Feb    20 14:00 19 IST 2012  (duplicate entry) 
sree=Tue Jan  20 14:05 19 IST 2012  
divya = Tue Jan  20 14:20 19 IST 2012  
anusha=Tue Jan 20 14:45 19 IST 2012 
kavitha= Tue Feb    20 14:00 19 IST 2012 (duplicate entry) 

Bash 스크립트를 사용하여 중복된 엔트리를 삭제할 수 있는 방법이 있습니까?

바람직한 출력

kavitha= Tue Feb    20 14:00 19 IST 2012 
sree=Tue Jan  20 14:05 19 IST 2012  
divya = Tue Jan  20 14:20 19 IST 2012  
anusha=Tue Jan 20 14:45 19 IST 2012

넌 할 수 있다.sort그리고나서uniq:

$ sort -u input.txt

또는 사용awk:

$ awk '!a[$0]++' input.txt

파일에서 중복된 연속 행을 삭제합니다('uniq' 에뮬레이트).
중복된 행 집합의 첫 번째 행은 유지되고 나머지는 삭제됩니다.

sed '$!N; /^\(.*\)\n\1$/!P; D'

@kev의 awk 솔루션과 유사한 Perl 원라이너:

perl -ne 'print if ! $a{$_}++' input

이 변동은 비교하기 전에 후행 공백을 제거합니다.

perl -lne 's/\s*$//; print if ! $a{$_}++' input

이 변형은 파일을 인플레이스로 편집합니다.

perl -i -ne 'print if ! $a{$_}++' input

이 변형은 파일을 인플레이스 편집하여 백업을 만듭니다.input.bak

perl -i.bak -ne 'print if ! $a{$_}++' input

다음과 같이 하면 도움이 될 수 있습니다.

cat -n file.txt |
sort -u -k2,7 |
sort -n |
sed 's/.*\t/    /;s/\([0-9]\{4\}\).*/\1/'

또는 다음과 같습니다.

 awk '{line=substr($0,1,match($0,/[0-9][0-9][0-9][0-9]/)+3);sub(/^/,"    ",line);if(!dup[line]++)print line}' file.txt

언급URL : https://stackoverflow.com/questions/9377040/remove-duplicate-entries-in-a-bash-script

반응형