Wie vergleicht man zwei Zeilen in zwei separaten Dateien?

Wie vergleicht man zwei Zeilen in zwei separaten Dateien?

Meine Frage ist, wie man zwei Zeilen in zwei separaten Dateien vergleicht. Im Grunde habe ich zwei Dateien, Datei1 enthält eine Zeile:

${X##*a}

Datei2 enthält eine Zeile:

baaabaabab

Was ich versucht habe ist:

diff -u file1 file2 > file3

aber das funktioniert nicht aaaaso wie es soll. Auch sind die beiden Dateien nicht immer gleich, sondern der Unterschied liegt immer am Zeilenanfang.


Ich habe mein Programm so geändert, dass ich jetzt zwei Variablen habe, eine mit aaaabaaabaababund eine mit a. Jetzt kann ich Folgendes tun:

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

Tempfile enthält baaabaabab. Aber wie bekomme ich aaaa? Ich dachte an:

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

aber das funktioniert nicht.

Antwort1

difffunktioniert zeilenweise. Wenn sich Zeilen also auch nur um ein Zeichen unterscheiden, betrachtet diff sie als unterschiedlich.

In Ihrem Fall könnten Sie beispielsweise Ihre Eingabedaten so umwandeln, dass jedes Zeichen in einer eigenen Zeile steht. Der foldBefehl hilft dabei. Sie könnten also Folgendes tun:

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

Dies funktioniert nur, wenn Ihre Eingabedateien wirklich jeweils nur eine Zeile haben.

Ich weiß nicht, ob dieses Ausgabeformat für Sie nützlich ist oder nicht. Wenn Sie buchstäblich die Zeichenfolge "aaaa" möchten und absolut sicher sind, dass der Unterschiednuran einer Stelle in den Eingabezeilen, dann könnten Sie die obige Ausgabe weiterleiten durch awk:

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

Antwort2

So können Sie mit Perl den Inhalt der zweiten Datei aus dem Inhalt der ersten Datei entfernen und dann den Rest der ersten Datei in eine Ausgabedatei drucken:

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

verwandte Informationen