Como encontrar quais linhas são diferentes em um arquivo CSV na linha de comando do Linux?

1

Estou tentando descobrir quais linhas diferem entre file1.csv e file2.csv . if file1.csv se parece com isso:

1,2,3,4
5,6,7,8
9,10,11,12

e file2.csv são assim:

1,2,3,4
9,9,9,9
5,6,7,8
9,9,11,12

Qual é o comando que posso usar para extrair essas linhas exclusivas? Também seria diff , comm ou grep a melhor ferramenta?

    
por unknown_9 16.07.2018 / 19:00

1 resposta

2

Provavelmente você está procurando comm :

$ comm <(sort file1.csv) <(sort file2.csv)
        1,2,3,4
        5,6,7,8
9,10,11,12
    9,9,11,12
    9,9,9,9

Por padrão, ele imprimirá as linhas presentes apenas no primeiro arquivo como a primeira coluna, as que estão presentes na segunda coluna e as que estão no segundo arquivo como a terceira coluna. Você pode usar -1 , -2 ou -3 para suprimir qualquer uma dessas colunas. Por exemplo:

  • Mostrar apenas aqueles que estão nos dois arquivos:

    $ comm -12 <(sort file1.csv) <(sort file2.csv) 
    1,2,3,4
    5,6,7,8
    
  • Mostrar apenas as linhas presentes no primeiro arquivo, mas não no segundo:

    $ comm -32 <(sort file1.csv) <(sort file2.csv) 
    9,10,11,12
    
  • Mostrar apenas linhas presentes no segundo arquivo, mas não no primeiro:

    $ comm -31 <(sort file1.csv) <(sort file2.csv) 
    9,9,11,12
    9,9,9,9
    
por 16.07.2018 / 19:08

Tags