V GNU Awk 4.1.0 (vydáno v roce 2013) a novějších má možnost úpravy souborů „na místě“:
[...] Rozšíření "inplace" vytvořené pomocí nového zařízení lze použít k simulaci GNU "
sed -i
" funkce. [...]
Příklad použití:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
Chcete-li zachovat zálohu:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
Pokud nemáte GNU awk 4.1.0 nebo novější...
Nebudete mít takovou možnost jako sed's -i
možnost, takže místo toho udělejte:
$ awk '{print $0}' file > tmp && mv tmp file
Poznámka:-i
není kouzlo, ale také vytváří dočasný soubor sed
vyřídí to za vás.
Od GNU awk 4.1.0...
GNU awk
přidána tato funkce ve verzi 4.1.0 (vydáno 10.5.2013) . Není to tak přímočaré, jako když dáváte -i
možnost, jak je popsáno ve vydaných poznámkách:
Nová volba -i (z xgawk) se používá pro načítání souborů knihovny awk. To se liší od -f v tom, že první argument bez možnosti je považován za skript.
Musíte použít přibalený inplace.awk
include file pro správné vyvolání přípony takto:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
Proměnná INPLACE_SUFFIX
lze použít k určení přípony záložního souboru:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
Jsem rád, že tato funkce byla přidána, ale podle mě není implementace příliš nešikovná, protože síla pochází ze stručnosti jazyka a -i inplace
je 8 znaků příliš dlouhé i.m.o .
Zde je odkaz na příručku za oficiální slovo.
jen malý hack, který funguje
echo "$(awk '{awk code}' file)" > file