Como comparar duas linhas em dois arquivos separados?

Como comparar duas linhas em dois arquivos separados?

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

${X##*a}

file2 contém uma linha:

baaabaabab

O que eu tentei é:

diff -u file1 file2 > file3

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


Modifiquei meu programa para que agora tenha dois vars, um with aaaabaaabaababe outro with a. Agora posso fazer o seguinte:

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

arquivo temporário contém baaabaabab. Mas como consigo aaaa? Eu estava pensando em:

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

mas isso não funciona.

Responder1

difffunciona por linha. Portanto, se as linhas diferirem apenas em um caractere, diff as considerará diferentes.

Uma coisa que você pode fazer no seu caso é transformar seus dados de entrada de forma que cada caractere fique em sua própria linha. O foldcomando 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ê ou não. Se você quiser literalmente a string "aaaa" e tiver certeza absoluta de que a diferença éapenasem um lugar nas linhas de entrada, você poderia canalizar a saída acima por meio de awk:

$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$ 
$

Responder2

Aqui está uma maneira de usar perl para remover o conteúdo do segundo arquivo do conteúdo do primeiro e, em seguida, 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

informação relacionada