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 aaaa
so 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 aaaabaaabaabab
und 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
diff
funktioniert 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 fold
Befehl 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