Como comparar duas linhas em dois arquivos separados?

0

Minha pergunta é como comparar duas linhas em dois arquivos separados? Basicamente eu tenho dois arquivos, file1 contém uma linha:

${X##*a}

o arquivo2 contém uma linha:

baaabaabab

O que tentei é:

diff -u file1 file2 > file3

mas isso não dá aaaa como deveria. Além disso, os dois arquivos nem sempre são os mesmos, mas a diferença está sempre no início da linha.

Eu modifiquei meu programa para que agora eu tenha dois vars um com aaaabaaabaabab e um com a . Agora posso fazer o seguinte:

echo ${var1##*$var2} > tempfile.txt

tempfile contém baaabaabab . Mas como obtenho aaaa ? Eu estava pensando em:

echo ${var1//*$var2} > tempfile.txt

mas isso não funciona.

    
por bob 02.11.2015 / 18:26

2 respostas

1

diff funciona por linha. Então, se as linhas diferem até mesmo apenas por um caractere, então diff as considera diferentes.

Uma coisa que você pode fazer no seu caso é transformar seus dados de entrada de forma que cada caractere esteja em sua própria linha. O comando fold ajuda com isso. Então você poderia fazer algo como:

$ diff <(fold -w1 file1) <(fold -w1 file2)
1,4d0
< a
< a
< a
< a
$ 

Isso só funciona se seus arquivos de entrada realmente tiverem apenas uma linha cada.

Não sei se esse formato de saída é útil para você. Se você quer literalmente a string "aaaa", e você está absolutamente garantido que a diferença é somente em um lugar nas linhas de entrada, então você poderia canalizar a saída acima através de awk :

$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$ 
$
    
por 02.11.2015 / 18:37
1

Aqui está uma maneira de usar perl para remover o conteúdo do segundo arquivo do conteúdo do primeiro, depois imprimir o restante do primeiro arquivo em um arquivo de saída:

perl -e '$x=<>; $y=<>; $x=~s/$y//; print $x' 1.txt 2.txt > out.txt
    
por 02.11.2015 / 19:42

Tags