Alle drei anderen Antworten auf diese Frage sind gut, und da jeder auf eine andere Art antwortet, wäre es eine gute Übung, jeden zu lernen. LC-datascientist 's und Diego' s Antwort jeder Spawn eine Subshell, so λuser 's Zwei-Zeilen-Ansatz, vielleicht mit &&
zwischen den beiden Befehlen, ist die idealste.
Wenn Sie wirklich diese in einem Befehl möchten, die nicht eine Unterschale nicht starten, können Sie awk
(mawk) verwenden:
awk 'BEGIN { getline < file1.txt; print } 1' file2.txt
gawk
kann es noch eleganter dank der nextfile
Befehl tun:
gawk '1; NR == FNR { nextfile }' file1.txt file2.txt
Diese tun das gleiche: die erste Zeile von file1.txt und druckt sie dann die gesamte file2.txt druckt.
Der mawk
Code verwendet getline
, um eine einzelne Zeile von einer gegebenen Eingabe in $0
zu lesen (in diesem Fall; siehe die Manpage), wir können das tun, bevor wir file2.txt lesen. 1
ist wahr, daher löst diese zweite Klausel immer aus und löst die Standardaktion aus (print $0
).
Der gawk
Code druckt zuerst, dann verwendet NR == FNR
, um festzustellen, dass Sie bei der ersten Datei (die Gesamtzahl der Datensätze (Zeilen) und die Anzahl der Datensätze der aktuellen Datei ist die gleiche) suchen, in diesem Fall ist es bereits Zeit, um zur zweiten Datei zu wechseln.
Für die ersten drei Zeilen muss mawk
eine Schleife:
awk 'BEGIN { for (i=0;i<3;i++) { getline < file1.txt; print } } 1' file2.txt
und gawk
muss lediglich eine weitere Bedingung:
gawk '1; NR == FNR && NR >= 3 { nextfile }' file1.txt file2.txt
Danke für alle Vorschläge. Es ist in eine wirklich interessante Konversation und Lernerfahrung für mich geraten. Wenn mehr Leute ihre One-Liner oder Ansätze zum Teilen haben, höre ich sie gerne. @Adam Katz, wenn ich mehr als nur die erste Zeile der ersten Datei (mehrere Zeilen) nehmen will, oder sagen, ich möchte Zeilen 2 und 3 aus 'file1.txt' kopieren und sie an den Anfang von' hinzufügen file2.txt' mit 'awk' oder' gawk', wie ändere ich diese awk und gawk Befehle, die du zur Verfügung gestellt hast? –
Ich habe die Antwort mit einer Version aktualisiert, die die ersten drei Zeilen abruft. Ändern Sie einfach die Zahl "3" auf die gewünschte Zahl. 'gawk' kann leicht verändert werden, um genaue Zeilennummern zu spezifizieren (' NR == FNR && (NR == 2 || NR == 4) 'wird zB die Zeilen 2 und 4 der ersten Datei erhalten). –