Bash dois scripts de comparação de arquivos de texto

0

Dado dois arquivos, quero escrever um script de shell que leia cada linha do arquivo1 e verifique se ele está lá no arquivo2. Se uma linha não for encontrada no arquivo2, ela deve ser mantida em uma tabela TAB1. Além disso, se houver alguma linha adicional no arquivo2, que não esteja no arquivo 2, ela deve ser mantida em uma tabela TAB2.

Os arquivos podem conter números de palavras ou qualquer coisa. Por exemplo:

arquivo1:

Hi!
1234
5678
1111
hello

arquivo2:

1111
5678
1234
Hi!
hellothere

Nesse caso, deve haver "olá" na TAB1 e "hellothere" na TAB2

Se dois arquivos são iguais eu quero retornar com "arquivos são iguais" eco ou algo parecido.

Como posso fazer isso? Eu tentei experimentar com diff, mas sem sucesso.

Obrigado antecipadamente

    
por SSV 31.12.2013 / 08:41

1 resposta

0

Primeiro, você precisa classificar cada arquivo. Então você precisa usar comm . Finalmente, você pode extrair as colunas que comm produz usando awk . Então, algo assim.

#! /bin/bash
sort $1 > $1.sorted
sort $2 > $2.sorted
comm -3 $1.sorted $2.sorted > columns
if [ -s columns ]; then
  TAB1="$(awk '{ print $1 }' < columns)"
  TAB2="$(awk '{ print $2 }' < columns)"
  # do something with TAB1 and TAB2
else
  echo $1 and $2 contain the same data
fi

Você chamaria esse script assim:

./myscript file1 file2

depois de tornar o script executável com chmod .

    
por 31.12.2013 / 09:18