CSV 파일에서 중복 항목 제거

CSV 파일에서 중복 항목 제거

중복된 데이터가 다시 인쇄되는 [csv] 파일이 있습니다. 즉, 동일한 데이터가 두 번 인쇄됩니다. 나는 사용해 보았습니다.정렬 고유성 그러나 sort myfile.csv | uniq -u아무것도 바뀌지 않았습니다 myfile.csv. 저도 시도해 보았지만 sudo sort myfile.csv | uniq -u아무런 차이가 없었습니다.

현재 내 CSV 파일은 다음과 같습니다.

a
a
a
b
b
c
c
c
c
c

나도 그렇게 보이고 싶다

a
b
c

답변1

myfile.csv변경 사항이 없는 이유는 -u옵션 uniq오직고유한 라인을 인쇄합니다. 이 파일에서는 모든 줄이 반복되므로아니요인쇄됩니다.

그러나 더 중요한 것은 출력이 저장되지 않는다는 점입니다. 기본적으로 콘솔 에만 인쇄되기 myfile.csv때문입니다 .uniqstdout

다음과 같이 해야 합니다.

$ sort -u myfile.csv -o myfile.csv

옵션의 의미는 다음과 같습니다.

  • -u- 고유한 줄만 유지
  • -o- 대신 이 파일로 출력stdout

자세한 내용을 확인하셔야 합니다 man sort.

답변2

파일 순서(정렬되지 않음)를 유지하면서 중복 항목을 제거하려면 다음을 수행할 수도 있습니다.

awk '!v[$1]++' /tmp/file

예를 들어

d
d
a
a
b
b
c
c
c
c
c

출력됩니다

d
a
b
c

답변3

Bellmin이 보여주듯이 시퀀싱은 훌륭합니다. 그의 답변은 정렬되지 않은 데이터에 가장 적합하며 기억하고 사용하기 쉽습니다.

하지만 입력 순서가 바뀌기 때문에 불안정하기도 합니다. 반드시 동일한 순서로 데이터를 처리해야 하지만 나중에 중복된 항목을 제거해야 한다면 awk가 더 나을 수 있습니다.

$ cat myfile.csv
c
a
c
b
b
a
c


$ awk '{if (!($0 in x)) {print $0; x[$0]=1} }' myfile.csv
c
a
b

이상한 경우이지만 때때로 발생합니다.

또한 데이터를 볼 때 이미 정렬된 데이터가 있는 경우 uniq를 실행할 수 있습니다.

$ cat myfile.csv 
a
a
a
b
b
c
c
c
c
c


$ uniq myfile.csv 
a
b
c

제가 제안한 두 가지 제안의 단점은 임시 파일을 사용하고 다시 복사해야 한다는 것입니다.

답변4

고유한 -u고유한 줄만 인쇄됩니다. 입력한 내용에는 고유한 줄이 없으므로 uniq -u아무것도 인쇄되지 않습니다. 필요한 것은 다음과 같습니다 sort.

sort -u myfile.csv

관련 정보