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á aaaa
como 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 aaaabaaabaabab
e 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
diff
funciona 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 fold
comando 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