Ich habe 10 Textdateien und ich möchte paste
jede Datei mit ihrem Paar, so dass ich insgesamt 5 Dateien habe.
Ich habe Folgendes versucht:
%Vor%Dieser Code kombiniert jedoch jede mögliche Kombination, anstatt nur die passenden Paare zu kombinieren.
Ich möchte also, dass die Datei 4_1.txt
mit 4_2.txt
, 5_1.txt
mit 5_2.txt
usw. gepaart wird.
Ich stimme der Antwort zu, die fedorqui derzeit im Zusammenhang mit der derzeit gestellten Frage vorschlägt. Das Folgende wird nur gegeben, um allgemeinere Antworten zu geben.
Ein weiterer allgemeiner Ansatz (für bash 4.0 oder neuer) besteht darin, Ihre Paare in einem assoziativen Array zu speichern:
%Vor%Ein anderer (kompatibel mit älteren Versionen von bash) ist die Verwendung von mehr als einem konventionellen Array:
%Vor%Sie können ein Wörterbuch / hashMap verwenden:
%Vor%Auf diese Weise können Sie mit Tupeln (Paaren), "Tripeln" usw. - beliebigen Dictionary / hashMap-Daten arbeiten.
Danksagung: Die Hauptidee stammt aus der großen @ CharlesDuffy-s Antwort.
Es gibt ein gemeinsames Muster, in dem Sie Paare von Dateien haben, wobei ein Name des Paares leicht von dem anderen abgeleitet werden kann. Wenn die Datei den Namen X hat und die andere Datei Y ist, haben Sie die folgenden häufigen Anwendungsfälle.
All dies eignet sich für das gleiche grobe Code-Skelett.
%Vor% Der Schlüssel hier ist die Beobachtung, dass y
von x
mit einigen einfachen Variablensubstitutionen abgeleitet werden kann. Sie durchlaufen also die x
-Werte und ermitteln den entsprechenden y
-Wert innerhalb der Schleife.
Hier haben wir die in den Shells eingebauten Operatoren ${variable#prefix}
und ${variable%suffix}
verwendet, um den Wert der Variablen mit einem führenden prefix
bzw. einem nachlaufenden suffix
zurückzugeben. (Es gibt auch ##
und %%
, um die längste anstelle der kürzesten möglichen Übereinstimmung zu finden. Der Ausdruck nach #
oder %
ist ein normales Shell-Glob-Muster.) Dies sollte normalerweise alles sein, was Sie brauchen, obwohl Sie häufig sed
oder awk
scripts sogar für diesen trivialen Job sehen (wo Sie eigentlich normalerweise versuchen sollten, einen externen Prozess zu vermeiden), sowie natürlich für anspruchsvollere Transformationen.
Wenn Sie x
Dateien, die über verschiedene Verzeichnisse verteilt sind, durchlaufen müssen, sollte die Schleife mit etwas wie
Ein häufig auftretendes Problem in ähnlichen Fragen sind Antworten, die $x
und $y
nicht richtig angeben. Im Allgemeinen sollte jede Variable, die einen Dateinamen enthält, immer in Anführungszeichen stehen.
Wo X und Y nicht verwandt sind, besteht eine übliche Lösung darin, ein Here-Dokument mit dem Mapping zu durchlaufen:
%Vor%Tags und Links bash for-loop nested-loops paste