Compare duas colunas de arquivo

Compare duas colunas de arquivo

Tenho arquivos de texto longos com campos delimitados por espaço:

cat file1.txt
Id    leng  sal   mon
25671 34343 56565 5565
44888 56565 45554 6868
23343 23423 26226 6224
77765 88688 87464 6848
66776 23343 63463 4534

cat file2.txt
Id    number
25671 34343 
76767 34234 
23343 23423 
66776 23343 

cat output.txt
Id    leng  sal   mon
44888 56565 45554 6868
77765 88688 87464 6848

file1.txttem quatro colunas, file2.txttem duas colunas. Quero comparar a primeira coluna ( $1) em ambos os arquivos ( file1.txt, file2.txt) e gerar o arquivo que não corresponde em file2.txt.

eu tentei

join -v1 file1.txt file2.txt >output.txt

Mas a saída contém alguns erros. Qualquer comando awk/ sedé apreciado.

Responder1

Para usar join, você precisa ter certeza de que FILE1 e FILE2 estãoclassificadonos campos de junção.

O seguinte comando deve resolver o problema:

join -v1 <(sort file1.txt) <(sort file2.txt)

Responder2

Assim, mas não inclui a linha de cabeçalho:

$ awk '{print $1}' file2.txt | grep -vf - file1.txt
44888 56565 45554 6868
77765 88688 87464 6848

Nota: ajustei isso para corresponder ao resultado do exemplo, não à sua descrição. Se você quiser o contrário, basta alternar arquivo1 e arquivo2.

Dividindo isso:

  • awkimprime apenas o campo 1 defile2.txt
  • grep -vinverte a correspondência (imprime linhas não correspondentes)
  • -f -diz greppara ler a lista de padrões de correspondência de um arquivo, neste caso -( STDIN), que foi canalizado deawk

informação relacionada