Misalkan Anda ingin mengganti baris 4 dengan teks "berbeda". Anda dapat menggunakan AWK seperti:
awk '{ if (NR == 4) print "different"; else print $0}' input_file.txt > output_file.txt
AWK menganggap input sebagai "catatan" dibagi menjadi "bidang". Secara default, satu baris adalah satu catatan. NR
adalah jumlah catatan yang terlihat. $0
mewakili catatan lengkap saat ini (sementara$1
adalah bidang pertama dari catatan dan sebagainya; secara default bidang adalah kata-kata dari baris).
Jadi, jika nomor baris saat ini adalah 4, cetak string "berbeda" tetapi cetak baris tidak berubah.
Dalam AWK, kode program terlampir di { }
jalankan sekali pada setiap catatan input.
Anda perlu mengutip program AWK dalam tanda kutip tunggal untuk menjaga shell dari mencoba menafsirkan hal-hal seperti $0
.
EDIT: Program AWK yang lebih pendek dan lebih elegan dari @chepner di komentar di bawah:
awk 'NR==4 {$0="different"} { print }' input_file.txt
Hanya untuk catatan (yaitu baris) nomor 4, ganti seluruh rekaman dengan string "berbeda". Kemudian untuk setiap record input, cetak record.
Jelas keterampilan AWK saya berkarat! Terima kasih, @ chepner.
Sunting: dan lihat juga versi yang lebih pendek dari @Dennis Williamson:
awk 'NR==4 {$0="different"} 1' input_file.txt
Cara ini dijelaskan dalam komentar: 1
selalu bernilai true, sehingga blok kode yang terkait selalu berjalan. Tetapi tidak ada blok kode yang terkait, yang berarti AWK melakukan tindakan standarnya hanya dengan mencetak seluruh baris. AWK dirancang untuk memungkinkan program singkat seperti ini.