
Ich habe Datei1, deren Inhalt wie folgt aussieht:
Die 6 Spalten werden von 6 verschiedenen Hosts abgerufen, bevor sie mit dem Befehl „-exec cp“ angezeigt werden. Dies dient nur zur Information.
Jetzt habe ich eine Liste mit 6 Hostnamen (Datei2), die ich als 1. Zeile zu Datei1 hinzufügen möchte.
Der Inhalt von Datei2 ist unten angegeben.
HOST1
HOST2
HOST3
HOST4
HOST5
HOST6
Ich brauche die endgültige Ausgabe so.
Ich kann eine Spalte, aber keine Zeile hinzufügen.
Antwort1
Hier ist eine Möglichkeit:
awk -vhead="$(tr '\n' ' ' <file2)" 'BEGIN{print head}{print}' file1 > newfile
Der tr
Befehl ersetzt Zeilenumbrüche durch Leerzeichen und wandelt die „Spalte“ in eine „Zeile“ um. Dies wird als Variable file2
übergeben , die vor allem anderen gedruckt wird. Dann wird einfach jede Zeile der Eingabedatei gedruckt.awk
head
Alternativ können Sie das Ganze auch in folgendem Format erledigen awk
:
awk 'NR==FNR{printf "%s ",$0; next}FNR==1{print ""}1;' file2 file1 > newfile
NR
ist die aktuelle Eingabezeilennummer und FNR
die Zeilennummer der aktuellen Datei. Die beiden sind nur gleich, während die 1. Datei gelesen wird. Das printf "%s ",$0; next
druckt die aktuelle Zeile ohne ein \n
am Ende und springt zur nächsten. Das FNR==1{print ""}
dient lediglich zum Hinzufügen eines \n
nach dem Drucken der Kopfzeile und das 1;
ist awk
eine Abkürzung für „diese Zeile drucken“.
Antwort2
( echo $(cat file2) ; cat file1 ) | column -t > file3