CSV 파일에서 중복 항목 제거


13

중복 데이텀이 다시 인쇄 된 [csv] 파일이 있습니다. 즉 동일한 데이터가 두 번 인쇄됩니다. 나는 sort의 uniq 을 사용하여 시도했지만에 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

sort -u myfile.csv> tmp.csv; mv -f tmp.csv myfile.csv
Archemar

에 따르면 man sort"제자리에서"정렬 할 수 없습니다.
Archemar

터미널에 의존하지 않아도됩니다. 대신이 온라인 도구를 시도 할 수 있습니다 textmechanic.com/text-tools/basic-text-tools/...
Aminah Nuraini에게

답변:


16

(가) 그 이유 myfile.csv때문에 변경되지는 -u대한 옵션이 uniq됩니다 의 고유 라인을 인쇄 할 수 있습니다. 이 파일에서 모든 줄은 중복되므로 인쇄 되지 않습니다 .

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

다음과 같이해야합니다.

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

옵션은 다음을 의미합니다.

  • -u -독특한 라인 만 유지
  • -o -대신이 파일로 출력 stdout

man sort자세한 내용을 보려면 확인해야 합니다.


3

벨 민이 보여 주듯이, 정렬은 훌륭합니다. 그의 대답은 정렬되지 않은 데이터에 가장 적합하며 기억하고 사용하기 쉽습니다.

그러나 입력 순서를 변경하므로 변동성도 있습니다. 데이터를 동일한 순서로 진행해야하지만 나중에 중복을 제거해야하는 경우 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

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


2

uniq -u 는 고유 한 줄만 인쇄합니다. 입력에 고유 한 줄이 없으므로 uniq -u아무 것도 인쇄하지 마십시오. 당신은 필요합니다 sort:

sort -u myfile.csv

2

정렬되지 않은 파일의 순서를 유지하고 싶지만 여전히 중복을 제거하려면이 작업을 수행 할 수 있습니다

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

예를 들어

d
d
a
a
b
b
c
c
c
c
c

출력됩니다

d
a
b
c

구문을 확장 해 주시겠습니까?
Sopalajo de Arrierez

문자열을 해시에 넣습니다. 해시에 문자열이 없으면 인쇄하십시오.
NinjaGaiden
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.