GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengubah file di tempat menggunakan awk? (seperti halnya sed -i)

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.

Linux
  1. Bagaimana cara menulis stderr ke file saat menggunakan tee dengan pipa?

  2. Bagaimana cara menggabungkan dua file menggunakan AWK?

  3. Cara mengurutkan file di tempat

  1. Bagaimana Cara Mengganti String Dalam File?

  2. Bagaimana Mencapai Portabilitas Dengan Sed -i (Pengeditan di Tempat)?

  3. Bagaimana cara mengisi file dengan FF menggunakan dd?

  1. Bagaimana melakukan sed like text ganti dengan python?

  2. Bagaimana cara memasukkan teks ke baris pertama file menggunakan sed?

  3. Bagaimana cara mengubah pengkodean yang digunakan server SFTP saya?