그래서 파일 이름과 관련 번호가 포함된 텍스트 집합이 있습니다. 현재는 다음과 같습니다.
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
) 행을 제거하는 방법을 알 수 없습니다. 완벽한 ). 누구든지 나에게 조언을 해줄 수 있습니까?uniq
sort
sort
uniq
지금까지 아래 코드는 내가 원하는 것을 제공하지 않습니다.
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.138532
awk
답변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