awk -F, '!seen[$1]++'
$1
é a primeira coluna, mude conforme apropriado; você pode usar várias colunas separadas por vírgulas ( [$1,$3]
) ou $0
para a linha inteira.
Eu tenho muitos arquivos CSV que eu combinei. No entanto, existem duplicatas, mas a linha inteira não é duplicada. Eu tenho uma coluna que eu quero usar como critério para procurar uma duplicata. E se houver uma duplicata nessa coluna da coluna inteira, exclua as linhas que contêm as duplicatas nas colunas até que você tenha todos os valores exclusivos nessa coluna.
Alguém sabe a melhor maneira de fazer isso no Bash, sed ou awk?
awk -F, '!seen[$1]++'
$1
é a primeira coluna, mude conforme apropriado; você pode usar várias colunas separadas por vírgulas ( [$1,$3]
) ou $0
para a linha inteira.
Bash é difícil, mas você pode chamar Perl de Bash? Se seus campos estiverem separados por vírgulas e seu campo-chave for o segundo,
$ cat a.csv
11,22,33
214,22,354
6,6,6
4,5,7
1,22,1
este forro será impresso se ainda não tiver visto a segunda coluna:
$ perl -ne '$value = (split /,/)[1]; print unless $x{$value}++;' a.csv
11,22,33
6,6,6
4,5,7
O [1] é o número da coluna e é baseado em zero.
Se houver campos que contenham caracteres delimitadores dentro de aspas (não funciona com o 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