GNU awk
(umumnya ditemukan pada sistem Linux), sejak versi 4.1.0, dapat menyertakan "awk
perpustakaan sumber" dengan -i
atau --include
pada baris perintah. Salah satu pustaka sumber yang didistribusikan dengan GNU awk
adalah salah satu 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 ganti file input. Baris bertuliskan there
tidak disimpan karena tidak dikeluarkan 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 akan diedit secara individual di tempat. Namun Anda dapat menonaktifkan pengeditan di tempat untuk file (atau kumpulan 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 "pengeditan 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 sambil mengalihkan ke nama file asli.
Melakukan operasi dalam urutan ini (menjalankan awk
pada file sementara, bukan pada file asli) memastikan bahwa meta-data file (izin dan kepemilikan) dari file asli tidak diubah.
Coba ini.
awk new.awk sample.csv > tmp.csv && mv -f tmp.csv sample.csv
- alihkan output ke file temp.
- lalu pindahkan konten file temp ke file asli.