GNU awk (běžně se vyskytuje v systémech Linux), od verze 4.1.0, je schopen zahrnout "awk zdrojová knihovna" s -i nebo --include na příkazovém řádku. Jedna ze zdrojových knihoven, která je distribuována s GNU awk se nazývá inplace :
$ cat file
hello
there
$ awk -i inplace '/hello/ { print "oh,", $0 }' file
$ cat file
oh, hello
Jak můžete vidět, výsledkem je awk kód nahradit vstupní soubor. Řádek říká there se neuchová, protože jej program nevypisuje.
S awk skript v souboru, použijete jej jako
awk -i inplace -f script.awk datafile
Pokud je awk proměnná INPLACE_SUFFIX je nastaven na řetězec, pak by knihovna vytvořila zálohu původního souboru s příponou názvu souboru.
awk -i inplace -v INPLACE_SUFFIX=.bak -f script.awk datafile
Máte-li několik vstupních souborů, pak každý soubor lze individuálně upravit na místě. Úpravy na místě však můžete u souboru (nebo sady souborů) vypnout pomocí inplace=0 na příkazovém řádku před tímto souborem:
awk -i inplace -f script.awk file1 file2 inplace=0 file3 inplace=1 file4
Ve výše uvedeném příkazu file3 nebude upraveno na místě.
Pro přenosnější „úpravu na místě“ jednoho souboru použijte
tmpfile=$(mktemp)
cp file "$tmpfile" &&
awk '...some program here...' "$tmpfile" >file
rm "$tmpfile"
To zkopíruje vstupní soubor do dočasného umístění a poté použije awk kód na dočasném souboru při přesměrování na původní název souboru.
Operace provádějte v tomto pořadí (spuštění awk na dočasný soubor, nikoli na původní soubor) zajišťuje, že metadata souboru (oprávnění a vlastnictví) původního souboru nebudou změněna.
Zkuste toto.
awk new.awk sample.csv > tmp.csv && mv -f tmp.csv sample.csv
- přesměrovat výstup do dočasného souboru.
- pak přesuňte obsah dočasného souboru do původního souboru.