답변:
awk 명령을 중복 행을 제거하기 위해 수행하려는 열로 변경하십시오 (이 경우 세 번째 열).
awk '!seen[$3]++' filename
이 명령은 awk
인쇄 할 행을 알려줍니다 . 변수 $3
는 열 3의 전체 내용을 보유하며 대괄호는 배열 액세스입니다. 따라서 filename의 각 행의 세 번째 열에 대해 명명 된 배열의 노드 seen
가 증분되고 해당 노드 (column3)의 내용이 !
이전에 설정 되지 않은 경우 행이 인쇄됩니다 .
위의 awk
명령은 입력 파일 의 열이 자신 과 구분 space
되거나 그 Tab
사이에 구분되는 경우 작동하며, 열이 다른 것으로 구분되면 -F
옵션 으로 awk에 알려 주어야합니다 . 예를 들어, 모든 열이 쉼표 ( ,
) 로 구분 되고 세 번째 열을 기준으로 행을 제거하려는 경우 -F','
옵션을 사용하십시오 .
awk -F',' '!seen[$3]++' filename
sort
명령은 이미 큰 파일을 처리하도록 최적화되어 있습니다. 따라서 sort
파일에서 다음과 같이 명령을 잘 사용할 수 있습니다.
sort -u -t' ' -k3,3 file
-u
-고유 한 줄만 인쇄하십시오. -t
-구분자를 지정하십시오. 이 예에서는 공백을 구분 기호로 사용합니다.-k3,3
-3 번째 필드를 기준으로 정렬합니다.이 답변을 참조하면 GNU 정렬이 실제로 큰 파일을 정렬하는 더 나은 방법이라는 것을 알 수 있습니다. 귀하의 경우에는 -parallel
없이도 많은 시간 지연없이 최종 결과를 얻을 수 있다고 생각 합니다.
-u
만 제거 한다는 말만으로 어쨌든 언급하려고 했지만 ... 잘못되었습니다.