Ich möchte ein Skript vorbereiten, in dem der Dateiinhalt durch seinen Dateinamen ersetzt wird.
Angenommen, ich habe einen Dateinamen ABC_20161027220153.txt
und 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:
- awk kennt den aktuellen Dateinamen in der Variable
FILENAME
- 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
substr
Funktion als Hilfe. - Ersetzen Sie für jede Eingabezeile, die zuvor
|
durch die Anweisung in Symbole aufgeteilt wurdeBEGIN
, die Felder 4 und 5 durch ihre neuen Werte - 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||