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