Saya telah menemukan pertanyaan (pada SO itu sendiri) di mana OP harus melakukan edit dan menyimpan operasi ke Input_file itu sendiri.
Saya tahu untuk satu Input_file yang bisa kami lakukan sebagai berikut:
awk '{print "test here..new line for saving.."}' Input_file > temp && mv temp Input_file
Sekarang katakanlah kita perlu membuat perubahan dalam format file yang sama (asumsikan .txt di sini).
Apa yang saya coba / pikirkan untuk masalah ini: Pendekatannya adalah melalui loop untuk file .txt dan memanggil tunggalawk
adalah proses yang menyakitkan dan TIDAK direkomendasikan, karena akan membuang siklus cpu yang tidak perlu dan untuk lebih banyak jumlah file akan lebih lambat.
Jadi apa yang mungkin bisa dilakukan di sini untuk melakukan inplace edit untuk banyak file dengan NON GNU awk
yang tidak mendukung opsi inplace. Saya juga telah melalui utas ini. Simpan modifikasi di tempat dengan awk tetapi tidak ada banyak untuk wakil NON GNU awk dan mengubah beberapa file di dalamawk
dirinya sendiri, karena awk non GNU tidak akan memiliki inplace
pilihan untuk itu.
CATATAN: Mengapa saya menambahkanbash
tag sejak itu, di bagian jawaban saya, saya telah menggunakan perintah bash untuk mengganti nama file sementara ke nama Input_file mereka yang sebenarnya sehingga menambahkannya.
EDIT: Sesuai komentar Ed sir menambahkan contoh sampel di sini, meskipun tujuan dari kode utas ini dapat digunakan oleh mengedit inplace tujuan umum juga.
Sampel Input_file:
cat test1.txt
onetwo three
tets testtest
cat test2.txt
onetwo three
tets testtest
cat test3.txt
onetwo three
tets testtest
Contoh output yang diharapkan:
cat test1.txt
1
2
cat test2.txt
1
2
cat test3.txt
1
2
awk
, (mungkin dalam subkulit) atau {...}
grup terlampir dan kemudian menulis hasilnya ke file output yang diinginkan (baik untuk setiap file input, atau file gabungan untuk semua file input). Kemudian Anda cukup mengarahkan output dari subkulit atau kelompok kurung kurawal ke file saat ini yang sedang ditulis? Cukup dengan memasukkan serangkaian file input setelah awk
perintah akan memproses semua file secara berurutan (atau yang serupa) ??
awk {..} file1 .. fileX
menulis file yang dimodifikasi sebagai, misalnya temp01
dan dalam iterasi Anda berikutnya saat memproses file berikutnya, gunakan a mv -f tmp01 input01
untuk menimpa file input dengan data yang dimodifikasi; atau (2) cukup menulis direktori baru ./tmp/tmp01 ... ./tmp/tmp0X
selama eksekusi awk
skrip dan menindaklanjutinya dengan loop atas file dalam ./tmp
direktori dan, misalnya mv -f "$i" "input_${i##*[^0-9]}"
(atau ekspansi apa pun yang Anda perlukan untuk mengganti file input lama.
awk
penyelesaian kode lengkap, opsi ke-2 hampir sama dengan apa yang saya gunakan dalam saran saya, akan bersyukurlah jika Anda bisa memberi tahu pikiran Anda tentang solusi itu, Pak.