In GNU Awk 4.1.0 (veröffentlicht 2013) und höher hat es die Option der "Inplace"-Dateibearbeitung:
[...] Die Erweiterung "inplace", die unter Verwendung der neuen Einrichtung erstellt wurde, kann verwendet werden, um GNU "sed -i
zu simulieren "-Funktion. [...]
Beispielverwendung:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
Um die Sicherung aufzubewahren:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
Es sei denn, Sie haben GNU awk 4.1.0 oder höher...
Sie haben keine solche Option wie -i
von sed Option so stattdessen tun:
$ awk '{print $0}' file > tmp && mv tmp file
Hinweis:die -i
ist keine Zauberei, es erstellt auch eine temporäre Datei sed
erledigt das einfach für Sie.
Ab GNU awk 4.1.0...
GNU awk
Diese Funktion wurde in Version 4.1.0 (veröffentlicht am 05.10.2013) hinzugefügt . Es ist nicht so einfach, einfach den -i
anzugeben Option wie in den veröffentlichten Notizen beschrieben:
Die neue Option -i (von xgawk) wird zum Laden von awk-Bibliotheksdateien verwendet. Dies unterscheidet sich von -f darin, dass das erste Argument, das keine Option ist, als Skript behandelt wird.
Sie müssen den gebündelten inplace.awk
verwenden include-Datei, um die Erweiterung wie folgt korrekt aufzurufen:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
Die Variable INPLACE_SUFFIX
kann verwendet werden, um die Erweiterung für eine Sicherungsdatei anzugeben:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
Ich bin froh, dass diese Funktion hinzugefügt wurde, aber für mich ist die Implementierung nicht sehr umständlich, da die Kraft von der Prägnanz der Sprache und -i inplace
kommt ist 8 Zeichen zu lang i.m.o .
Hier ist ein Link zum Handbuch für das offizielle Wort.
nur ein kleiner Hack, der funktioniert
echo "$(awk '{awk code}' file)" > file