Wie konvertiert man "yyyy-mm-dd" in "dd.mm" in der Spalte der Textdatei mit awk (oder sed usw.)?

568
N0rbert

Nehmen wir an, wir haben die folgende Zeile in einer Textdatei:

... 2018-09-13 5555 33-33 Some_string ... 

Ich muss die erste Spalte (Datum als yyyy-mm-dd) in ein anderes Format ( dd.mm, Jahr löschen) ändern, ohne andere Spalten zu berühren:

... 13.09 5555 33-33 Some_string ... 

Wie kann ich das programmgesteuert verwenden awk(oder sedusw.)?

0

1 Antwort auf die Frage

2
Kamil Maciorowski

Mögliche Lösung

sed 's/^....-\(..\)-\(..\)/\2.\1/' 

Diese mehreren Punkte sind möglicherweise nicht elegant. Dem Befehl ist es egal, ob es sich um Zahlen handelt. Es ist egal, ob in der ersten "Spalte" noch etwas mehr ist. Diese Probleme können mit einem komplexeren Ansatz behoben werden, aber in seiner aktuellen Form ist der Befehl recht unkompliziert.

Der allgemeine Befehl sed 's/A/B/'ersetzt das Muster Adurch Bhöchstens einmal pro Zeile.

Wo Ain diesem Fall besteht aus:

  • ^ - der Anfang einer Linienmarkierung
  • .... - genau vier Zeichen,
  • -- wörtlich -,
  • (..)- genau zwei Zeichen, auf die später verwiesen wird \1,
  • -- wörtlich -,
  • (..)- genau zwei Zeichen, auf die später verwiesen wird \2.

Und Bist

  • \2- was auch immer war in der zweiten ()in A,
  • .- wörtlich .,
  • \1- was auch immer war in dem ersten ()in A.

Zusätzlich (und )werden von entkommen \.

Um eine Datei zu verarbeiten, fügen Sie sie als letztes Argument hinzu. Um eine Datei an Ort und Stelle zu bearbeiten -i, verwenden Sie z

sed -i 's/^....-\(..\)-\(..\)/\2.\1/' myfile.txt