Ich habe eine Datei, in der jede 156780. Zeile eine Kopfzeile hat.
Ich wollte den awk-Befehl auf die erste Spalte jeder Zeile anwenden, außer auf die zweite Spalte der Kopfzeilen.
Oder zumindest die Kopfzeilen sollten davon unberührt bleiben.
Kann mir jemand dabei helfen?
Ich habe den awk-Befehl wie unten angegeben verwendet
awk 'NR>2 {printf("%10i %15.8E\n",$1,$2);}' fort.74 > fort.75
Antwort1
Die Kopfzeilen erfüllen die Bedingung NR % 156780 == 0
. Das bedeutet, dass Sie
awk 'NR % 156780 != 0 { process non-header row }' ...
... oder möglicherweise
awk '(NR - 1) % 156780 != 0 { process non-header row }' ...
(da NR
für die erste Zeile 1 gilt, nicht null)
Wenn Sie die Kopfzeilen unverändert durchlassen möchten:
awk '(NR - 1) % 156780 != 0 { process non-header row } (NR - 1) % 156780 == 0 { print }' ...
Das heißt, fügen Sie einfach eine einzelne print
Aktion für die inverse Bedingung der Aktion hinzu, die Sie für die Einwirkung auf die Nicht-Kopfzeilen verwenden.
Antwort2
wie wäre es mit dem Einfachen:
awk '(NR==1) { header=$0; rem="we retrieve the header content";}
( $0 != header ) { process non header lines here ... }'
(Sie können optional ein „; next“ in die erste Zeile einfügen, andernfalls können Sie es aber auch an einer kleinen Datei testen, zum Beispiel an einer mit den ersten fünf Zeilen der Originaldatei: Die zweite Zeile sollte die Zeile nicht verarbeiten, wenn sie mit dem Header übereinstimmt.)