GNU awk(powszechnie spotykany w systemach Linux), od wersji 4.1.0, może zawierać „ awkbibliotekę źródłową” za pomocą -ilub --includew wierszu poleceń. Jedną z bibliotek źródłowych dystrybuowanych wraz z GNU awkjest jedna o nazwie inplace:
$ cat file
hello
there
$ awk -i inplace '/hello/ { print "oh,", $0 }' file
$ cat file
oh, hello
Jak widać, powoduje to, że awkkod wyjściowy zastępuje plik wejściowy. Napis w wierszu therenie jest zachowywany, ponieważ nie jest generowany przez program.
Ze awkskryptem w pliku, używałbyś go tak jak
awk -i inplace -f script.awk datafile
Jeśli awkzmienna INPLACE_SUFFIXjest ustawiona na ciąg znaków, biblioteka utworzy kopię zapasową oryginalnego pliku z tym rozszerzeniem.
awk -i inplace -v INPLACE_SUFFIX=.bak -f script.awk datafile
Jeśli masz kilka plików wejściowych, każdy plik należy edytować osobno w miejscu. Ale możesz wyłączyć edycję w miejscu dla pliku (lub zestawu plików), używając inplace=0wiersza poleceń przed tym plikiem:
awk -i inplace -f script.awk file1 file2 inplace=0 file3 inplace=1 file4
W powyższym poleceniu file3nie będzie edytowane w miejscu.
Aby uzyskać bardziej przenośną „edycję w miejscu” pojedynczego pliku, użyj
tmpfile=$(mktemp)
cp file "$tmpfile" &&
awk '...some program here...' "$tmpfile" >file
rm "$tmpfile"
Spowodowałoby to skopiowanie pliku wejściowego do tymczasowej lokalizacji, a następnie zastosowanie awkkodu do pliku tymczasowego podczas przekierowywania do oryginalnej nazwy pliku.
Wykonanie operacji w tej kolejności (uruchamianie awkpliku tymczasowego, a nie oryginalnego) zapewnia, że metadane pliku (uprawnienia i własność) oryginalnego pliku nie zostaną zmodyfikowane.