CSV에서 열의 중복 행을 제거하는 Bash 명령/스크립트

CSV에서 열의 중복 행을 제거하는 Bash 명령/스크립트

병합된 CSV 파일이 많이 있습니다. 그러나 반복은 있지만 전체 행이 반복되지는 않습니다. 중복 항목을 검색하기 위한 기준으로 사용하고 싶은 열이 있습니다. 열 전체에 중복이 있는 경우 열에 고유한 값이 모두 포함될 때까지 중복이 포함된 열의 행을 삭제합니다.

Bash, sed 또는 awk에서 이를 수행하는 가장 좋은 방법을 아는 사람이 있습니까?

답변1

awk -F, '!seen[$1]++'

$1은 첫 번째 열입니다. 적절하게 변경하면 [$1,$3]쉼표( )로 구분된 여러 열을 사용할 수도 있고 $0전체 행을 사용할 수도 있습니다.

답변2

Bash는 어렵지만 Bash에서 Perl을 호출할 수 있나요? 필드가 쉼표로 구분되어 있고 키 필드가 두 번째 필드인 경우

$ cat a.csv
11,22,33
214,22,354
6,6,6
4,5,7
1,22,1

두 번째 열이 아직 표시되지 않으면 다음 줄이 인쇄됩니다.

$ perl -ne '$value = (split /,/)[1]; print unless $x{$value}++;' a.csv 
11,22,33
6,6,6
4,5,7

[1]은 열 번호이며 0부터 시작합니다.

답변3

일부 필드에 따옴표 안에 구분 기호가 포함된 경우(Ruby 1.8에서는 사용할 수 없음):

$ ruby -rcsv -e 'puts CSV.parse($<).uniq{|l|l[1]}.map(&:to_csv)' <<< $'"1,9",3\n4,8\n7,3'
"1,9",3
4,8

관련 정보