Formatieren von Textdateien mit dem awk-Befehl

Formatieren von Textdateien mit dem awk-Befehl

Ich verwende diesen Befehl:

awk 'NR>1 {print $1"  "$2}' fort.75 > newfort.75

und erhalte die Ausgabe als

     7  -2.2964292555E+000
     8 -2.3013363831E+000
     9 -2.3071951989E+000
     10 -2.3136811351E+000
     11 -2.3207311925E+000

Aber das gewünschte o/p ist

      7 -2.2964292555E+000
      8 -2.3013363831E+000
      9 -2.3071951989E+000
     10 -2.3136811351E+000
     11 -2.3207311925E+000

Die Werte im ersten Feld sollten so formatiert sein, dass sie alle die gleiche Breite haben. Außerdem sollte das zweite Feld in jeder Zeile in der gleichen Spalte beginnen.

Antwort1

Sie meinen möglicherweise, dass Sie eine Ausgabe in Spalten wünschen (obwohl die Daten in Ihrem Beispiel auch unterschiedlich sind). Wenn ja, versuchen Sie Folgendes:

awk 'NR>1 {print $1 "\t" $2}' fort.75 > newfort.75

Das würde Ihre Ausgabe durch ein TAB-Zeichen trennen \t.

Eine andere Möglichkeit ist, Folgendes zu verwenden printf, wie von Archemar vorgeschlagen:

awk 'NR>1 {printf("%4i %f\n",$1,$2);}' fort.75 > newfort.75

wobei die erste Spalte auf (in diesem Fall) 4 Zeichen Breite formatiert ist - nach Wunsch anpassen. Der Platz wird durch Leerzeichen " " aufgefüllt (kein Wortspiel beabsichtigt) und es wird kein TAB verwendet. Die Gleitkommazahlen werden allerdings auch neu formatiert, prüfen Sie also bitte, ob das für Sie in Ordnung ist. Wenn nicht, behandeln Sie die 2. Spalte als Zeichenfolge:

awk 'NR>1 {printf("%4i %s\n",$1,$2);}' fort.75 > newfort.75

verwandte Informationen