GNU awk
(umumnya ditemukan pada sistem Linux), sejak versi 4.1.0, dapat menyertakan " awk
pustaka sumber" dengan -i
atau --include
pada baris perintah. Salah satu pustaka sumber yang didistribusikan dengan GNU awk
adalah yang disebut inplace
:
$ cat file
hello
there
$ awk -i inplace '/hello/ { print "oh,", $0 }' file
$ cat file
oh, hello
Seperti yang Anda lihat, ini membuat output dari awk
kode menggantikan file input. Pepatah baris there
tidak disimpan karena tidak dihasilkan oleh program.
Dengan awk
skrip dalam file, Anda akan menggunakannya seperti
awk -i inplace -f script.awk datafile
Jika awk
variabel INPLACE_SUFFIX
diatur ke string, maka perpustakaan akan membuat cadangan dari file asli dengan itu sebagai akhiran nama file.
awk -i inplace -v INPLACE_SUFFIX=.bak -f script.awk datafile
Jika Anda memiliki beberapa file input, maka setiap file dengan masing-masing di tempat diedit. Tetapi Anda dapat mematikan pengeditan di tempat untuk file (atau serangkaian file) dengan menggunakan inplace=0
pada baris perintah sebelum file itu:
awk -i inplace -f script.awk file1 file2 inplace=0 file3 inplace=1 file4
Pada perintah di atas, file3
tidak akan diedit di tempat.
Untuk "mengedit di tempat" yang lebih portabel dari satu file, gunakan
tmpfile=$(mktemp)
cp file "$tmpfile" &&
awk '...some program here...' "$tmpfile" >file
rm "$tmpfile"
Ini akan menyalin file input ke lokasi sementara, lalu menerapkan awk
kode pada file sementara saat mengarahkan ke nama file asli.
Melakukan operasi dalam urutan ini (berjalan awk
pada file sementara, bukan pada file asli) memastikan bahwa file meta-data (izin dan kepemilikan) dari file asli tidak diubah.