Mi pregunta es ¿cómo comparar dos líneas en dos archivos separados? Básicamente tengo dos archivos, el archivo 1 contiene una línea:
${X##*a}
archivo2 contiene una línea:
baaabaabab
Lo que he probado es:
diff -u file1 file2 > file3
pero eso no da aaaa
como debería. Además, ambos archivos no son siempre iguales, pero la diferencia siempre está al principio de la línea.
Modifiqué mi programa para que ahora tenga dos variables, una con aaaabaaabaabab
y otra con a
. Ahora puedo hacer lo siguiente:
echo ${var1##*$var2} > tempfile.txt
El archivo temporal contiene baaabaabab
. ¿Pero cómo consigo aaaa
? Estaba pensando en:
echo ${var1//*$var2} > tempfile.txt
Pero eso no funciona.
Respuesta1
diff
funciona por línea. Entonces, si las líneas difieren aunque sea en un solo carácter, entonces diff las considera diferentes.
Una cosa que podría hacer en su caso es transformar sus datos de entrada de modo que cada carácter esté en su propia línea. El fold
comando ayuda con esto. Entonces podrías hacer algo como:
$ diff <(fold -w1 file1) <(fold -w1 file2)
1,4d0
< a
< a
< a
< a
$
Esto solo funciona si sus archivos de entrada realmente solo tienen una línea cada uno.
No sé si este formato de salida le resulta útil o no. Si literalmente desea la cadena "aaaa" y tiene la absoluta garantía de que la diferencia essoloen un lugar de las líneas de entrada, entonces podría canalizar la salida anterior a través de awk
:
$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$
$
Respuesta2
A continuación se muestra una forma de utilizar Perl para eliminar el contenido del segundo archivo del contenido del primero y luego imprimir el resto del primer archivo en un archivo de salida:
perl -e '$x=<>; $y=<>; $x=~s/$y//; print $x' 1.txt 2.txt > out.txt