같은 행에 있지 않은 중복 값 제거

같은 행에 있지 않은 중복 값 제거

그래서 파일 이름과 관련 번호가 포함된 텍스트 집합이 있습니다. 현재는 다음과 같습니다.

RR0.out -1752.142111    
RR1.out -1752.141887    
RR2.out -1752.142111    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    
RR7.out -1752.138493    
RR8.out -1752.138532

중복된 두 번째 값이 있는 행을 삭제하는 스크립트를 작성하고 싶습니다. 출력은 다음과 같습니다:

RR0.out -1752.142111    
RR1.out -1752.141887    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    
RR8.out -1752.138532    

나는 두 가지를 모두 보았고 sort -u이 목적으로 사용했지만 정확히 동일하지 않고(작동 하지만 완료되지 않음 ) 서로 인접하지 않은(작동 하지만 완료되지 않음 uniq) 행을 제거하는 방법을 알 수 없습니다. 완벽한 ). 누구든지 나에게 조언을 해줄 수 있습니까?uniqsortsortuniq

지금까지 아래 코드는 내가 원하는 것을 제공하지 않습니다.

sort -t ' ' -k 2n file > file2  
uniq -f 1 file2 > file3 

답변1

sort/를 사용하지 않으려면 다음을 수행 uniq하세요.

$ awk '!seen[$2]++' file
RR0.out -1752.142111    
RR1.out -1752.141887    
RR3.out -1752.140319    
RR4.out -1752.140564    
RR5.out -1752.138532    
RR6.out -1752.138493    

( 후행 공백만 다르기 RR5.out -1752.138532때문에 예상 출력과 다릅니다 . 두 번째 필드의 일부가 아닌 구분 기호의 일부로 처리하십시오.)RR8.out -1752.138532awk

답변2

$ sort -uk2 file
RR6.out -1752.138493
RR8.out -1752.138532
RR5.out -1752.138532
RR3.out -1752.140319
RR4.out -1752.140564
RR1.out -1752.141887
RR0.out -1752.142111

sort -u출력을 정렬하고 -k2두 번째 열을 기준으로 정렬/고유한 고유 값만 생성합니다.

첫 번째 열의 파일 이름을 기준으로 출력을 재정렬하려면 다음과 같이 재정렬하면 됩니다.

$ sort -uk2 file | sort -k1
RR0.out -1752.142111
RR1.out -1752.141887
RR3.out -1752.140319
RR4.out -1752.140564
RR5.out -1752.138532
RR6.out -1752.138493
RR8.out -1752.138532

관련 정보