중복 항목에서 하나의 값만 인쇄 [중복]

중복 항목에서 하나의 값만 인쇄 [중복]

내 파일에 다음 내용이 있습니다.

$ cat file.txt
code-coverage-api 
jsch 
cloudbees-folder 
apache-httpcomponents-client-4-api 
apache-httpcomponents-client-4-api 
jsch 
apache-httpcomponents-client-4-api 
jsch 
apache-httpcomponents-client-4-api 
jackson2-api 
apache-httpcomponents-client-4-api 
workflow-api 
echarts-api 
workflow-api 
envinject-api 
workflow-durable-task-step 
apache-httpcomponents-client-4-api 

내 예상 결과는 다음과 같습니다

code-coverage-api 
jsch 
cloudbees-folder 
apache-httpcomponents-client-4-api  
jackson2-api 
workflow-api 
echarts-api 
envinject-api 
workflow-durable-task-step 

현재는 아래와 같이 콘텐츠를 정렬한 후 중복 항목(한 요소 제외)을 수동으로 제거하고 있습니다.

$ cat file.txt |sort

파일에 중복 요소를 하나만 유지하고 나머지 중복 요소를 목록에서 제거하는 방법이 있습니까? 또한 일부 요소에는 중복 항목이 없다는 점에 유의하세요.

답변1

출력에 행 번호를 추가한 cat -n다음 두 번째 필드에서 고유하게 정렬할 수 있습니다.
그런 다음 첫 번째 필드를 숫자로 정렬하여 원래 순서를 유지하고 다음을 사용하여 줄 번호를 제거합니다 cut.

$ cat -n file.txt | sort -uk2,2 | sort -nk1,1 | cut -f2
code-coverage-api
jsch
cloudbees-folder
apache-httpcomponents-client-4-api
jackson2-api
workflow-api
echarts-api
envinject-api
workflow-durable-task-step

답변2

파일의 고유 요소를 얻으려면 다음을 시도하십시오.

cat file.txt | sort | uniq

중복을 제거하려는 경우. 그런 다음 다음 명령을 통해 파일을 업데이트할 수 있습니다.

cat file.txt | sort | uniq > file.txt

[참고: uniq는 인접한 요소만 고려합니다. 이것이 바로 우리가 그것들을 분류해야 하는 이유입니다. ]

관련 정보