Remove linhas em um arquivo onde o padrão ocorre apenas uma vez

0

Eu tenho um arquivo CSV. É ordenado por um identificador o primeiro campo. O identificador no primeiro campo pode aparecer em 1 ou em 2 linhas no campo. Eu quero remover todas as linhas no arquivo onde o identificador só ocorre uma vez.

Exemplo, o arquivo contém:

Id1,x11,x12...
Id2,x21,x22...
Id2,x23,x24...

Neste caso, quero remover a primeira linha porque o Id1 ocorre apenas uma vez.

    
por hamayoun 11.04.2016 / 18:30

2 respostas

1

Experimente:

 awk 'BEGIN{FS=",";}{if (!ids[$1]) {ids[$1]=1;lines[$1]=$0;} else {if (ids[$1]==1) {print lines[$1]; print; ids[$1]++;} else {print;}}}'

Quando um id é encontrado primeiro, ele é armazenado no array associativo ids , e toda a linha é armazenada no array associativo lines , mas não é impressa.

Quando um id é encontrado duas vezes ou mais, a linha armazenada é impressa e cada linha adicional é impressa também.

O teste:

$ cat data.csv
Id1,x11,x12...
Id2,x21,x22...
Id2,x23,x24...

$  awk 'BEGIN{FS=",";}{if (!ids[$1]) {ids[$1]=1;lines[$1]=$0;} else {if (ids[$1]==1) {print lines[$1]; print; ids[$1]++;} else {print;}}}' data.csv
Id2,x21,x22...
Id2,x23,x24...
    
por 11.04.2016 / 18:57
1

A resposta de Jay é a solução geral de awk para não ordenada, mas para encomendas pode ser mais simples:

awk -F, '$1!=id {id=$1;pr=$0 ORS;next} {print pr $0;pr=""}'
    
por 12.04.2016 / 10:10