In GNU Awk 4.1.0 (rilasciato nel 2013) e versioni successive, ha l'opzione di modifica dei file "inplace":
[...] L'estensione "inplace", creata usando la nuova funzione, può essere usata per simulare il GNU "
sed -i" funzione. [...]
Esempio di utilizzo:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
Per conservare il backup:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
A meno che tu non abbia GNU awk 4.1.0 o successivo...
Non avrai un'opzione come -i di sed opzione quindi invece fai:
$ awk '{print $0}' file > tmp && mv tmp file
Nota:il -i non è magico, crea anche un file temporaneo sed se ne occupa solo per te.
A partire da GNU awk 4.1.0...
GNU awk aggiunta questa funzionalità nella versione 4.1.0 (rilasciata il 10/05/2013) . Non è così semplice come dare solo il -i opzione come descritto nelle note rilasciate:
La nuova opzione -i (da xgawk) è usata per caricare i file della libreria awk. Ciò differisce da -f in quanto il primo argomento non opzione viene trattato come uno script.
Devi usare il pacchetto inplace.awk include file per richiamare correttamente l'estensione in questo modo:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
La variabile INPLACE_SUFFIX può essere utilizzato per specificare l'estensione per un file di backup:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
Sono felice che questa funzionalità sia stata aggiunta, ma per me l'implementazione non è molto scomoda in quanto il potere deriva dalla concisione del linguaggio e da -i inplace è lungo 8 caratteri i.m.o .
Ecco un collegamento al manuale per la parola ufficiale.
solo un piccolo trucco che funziona
echo "$(awk '{awk code}' file)" > file