Ersetzen des Inhalts einer Datei durch den Dateinamen

Ersetzen des Inhalts einer Datei durch den Dateinamen

Ich möchte ein Skript vorbereiten, in dem der Dateiinhalt durch seinen Dateinamen ersetzt wird.

Angenommen, ich habe einen Dateinamen ABC_20161027220153.txtund der Inhalt der Datei ist wie folgt

2000|2000_ABC|04|||0000000000||

Ich möchte ein Skript erstellen, in dem der Dateiinhalt wie unten geändert wird

2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

Wie kann ich das machen?

Antwort1

Dazu waren einige Schritte erforderlich:

  1. awk kennt den aktuellen Dateinamen in der VariableFILENAME
  2. Wenn wir den Dateinamen nicht in die dekodierten Elemente aufgeteilt haben (hier fest kodiert, was in der ersten Zeile jeder neuen Eingabedatei erfolgen muss), verwenden wir die substrFunktion als Hilfe.
  3. Ersetzen Sie für jede Eingabezeile, die zuvor |durch die Anweisung in Symbole aufgeteilt wurde BEGIN, die Felder 4 und 5 durch ihre neuen Werte
  4. Drucken Sie die rekonstruierte Linie

Alles zusammenfügen (ich habe es „abc.awk“ genannt):

BEGIN { OFS=FS="|" }

{
  if (FNR == 1) {
    f4=substr(FILENAME, index(FILENAME, "_") + 1, 8);
    f5a=substr(FILENAME, index(FILENAME, "_") + 9, 6);
    f5=substr(f4, 7, 2) "." substr(f4, 5, 2) "." substr(f4, 1, 4) " " \
        substr(f5a, 1, 2) "." substr(f5a, 3, 2) "." substr(f5a, 5, 2);
  }

  $4=f4
  $5=f5
  print $0
}

$ awk -f abc.awk ABC_20161027220153.txt
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

verwandte Informationen