So übergeben Sie den Inhalt einer Datei an eine Option/einen Parameter einer Funktion

So übergeben Sie den Inhalt einer Datei an eine Option/einen Parameter einer Funktion

Ich habe eine Reihe von .txt-Dateipaaren. In jedem Dateipaar enthält Datei1 eine einzelne Ganzzahl und Datei2 mehrere Textzeilen. In dem Skript, das ich schreibe, möchte ich die Ganzzahl in Datei1 verwenden, um anzugeben, wie viele Zeilen von oben aus Datei2 entfernt werden sollen, und diese Zeilen dann in eine andere Datei schreiben. Ich verwende gnu-parallel, um dies auf vielen Dateipaaren parallel auszuführen.

Eine einfache Möglichkeit hierfür scheint zu sein, den Inhalt von Datei1 als Parameter für die -nOption von zu übergeben head– ist das möglich? Ich habe versucht, xargsund zu verwenden cat File1, aber beides funktioniert nicht.

Ein Beispiel für ein Dateipaar:

File1:
2                        

File2:
AAA
BBB
CCC
DDD

Gewünschte Ausgabe:

File3:
AAA
BBB

Wenn ich gnu-parallel nicht verwenden würde, könnte ich den Inhalt von File1 einer Variablen zuweisen (obwohl ich nicht weiß, ob ich das an headdie -nOption von übergeben könnte?); parallel scheint {}diesen Ansatz jedoch zu verkomplizieren.

Bei Bedarf kann ich weitere Informationen bereitstellen.

Antwort1

Benutze einenBefehlsersetzung.

head -n "$(cat File1)" File2

Bei einer Befehlsersetzung wird die Ausgabe des Befehls in eine Befehlszeile eingefügt. Zeilenumbrüche am Ende der Ausgabe werden entfernt, was genau das ist, was Sie hier benötigen.

Alternativ können Sie in Bash (aber nicht in anderen Sh-Varianten) denmapfileintegriert, um eine Datei zeilenweise zu laden.

mapfile lines <File1
head -n "${lines[0]}" File2

Die Zeilen werden in ein Array geladen, daher sind die ZeilennummernNist . Für die erste Zeile können Sie in Bash auch schreiben .${lines[n]}$line

Antwort2

Erweiterung der Antwort von Gilles:

parallel 'head -n "$(cat {1})" {2}' ::: File1s* :::+ Corresponding_File2s*

Sie haben wahrscheinlich viele File1s, die Sie mit File2s verknüpfen möchten. Das erledigt :::+.

verwandte Informationen