GNU awk(Linux sistemlerinde yaygın olarak bulunur), 4.1.0 sürümünden bu yana , komut satırında veya komut satırında bir " awkkaynak kitaplığı" içerebilmektedir . GNU ile dağıtılan kaynak kütüphanelerinden biri :-i--includeawkinplace
$ cat file
hello
there
$ awk -i inplace '/hello/ { print "oh,", $0 }' file
$ cat file
oh, hello
Gördüğünüz gibi bu, awkkodun çıktısını girdi dosyasının yerini alır. Satır deyimi there, program tarafından çıktı alınmadığından korunmaz.
awkBir dosyadaki bir komut dosyasıyla,
awk -i inplace -f script.awk datafile
Eğer awkdeğişken INPLACE_SUFFIXbir dizeye ayarlanır, daha sonra kütüphane bir dosya adı soneki olarak bu orijinal dosyanın bir yedeğini olacaktır.
awk -i inplace -v INPLACE_SUFFIX=.bak -f script.awk datafile
Birden fazla giriş dosyanız varsa, her bir dosya ayrı ayrı yerinde düzenlenir. Ancak, inplace=0o dosyadan önceki komut satırını kullanarak bir dosya (veya bir dosya kümesi) için yerinde düzenlemeyi kapatabilirsiniz :
awk -i inplace -f script.awk file1 file2 inplace=0 file3 inplace=1 file4
Yukarıdaki komutta, file3yerinde düzenlenemezdi.
Tek bir dosyanın daha taşınabilir "yerinde düzenlenmesi" için şunu kullanın:
tmpfile=$(mktemp)
cp file "$tmpfile" &&
awk '...some program here...' "$tmpfile" >file
rm "$tmpfile"
Bu, giriş dosyasını geçici bir konuma kopyalar, ardından awkkodu özgün dosya adına yeniden yönlendirirken geçici dosyaya uygular .
İşlemleri bu sırayla yapmak ( awkorijinal dosyada değil, geçici dosyada çalışıyor ), orijinal dosyanın dosya meta verilerinin (izinler ve sahiplik) değiştirilmemesini sağlar.