Saya sedang membaca skrip awk ini
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Saya ingin tahu apa fungsi 1
di akhir itu
Saya sedang membaca skrip awk ini
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Saya ingin tahu apa fungsi 1
di akhir itu
Jawaban:
Suatu awk
program adalah serangkaian pasangan kondisi-tindakan, kondisi berada di luar kurung kurawal dan tindakan yang terlampir di dalamnya. Suatu kondisi dianggap salah jika mengevaluasi ke nol atau string kosong, hal lain benar (variabel tidak diinisialisasi adalah nol atau string kosong, tergantung pada konteksnya, sehingga mereka salah). Kondisi atau tindakan dapat diimplikasikan; kawat gigi tanpa syarat (seperti milik Anda dimulai) dianggap memiliki kondisi sebenarnya dan selalu dieksekusi jika terkena, dan kondisi apa pun tanpa tindakan akan mencetak garis jika dan hanya jika kondisi terpenuhi.
Di 1
akhir skrip Anda adalah kondisi (selalu benar) tanpa tindakan, sehingga menjalankan tindakan default untuk setiap baris, mencetak baris (yang mungkin telah dimodifikasi oleh tindakan sebelumnya di kurung kurawal).
Saya sangat tidak suka cara pintas jenis ini karena mengaburkan dan menyesatkan bagaimana itu diurai. Ketika Anda membaca sesuatu seperti awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, Anda mungkin berpikir bahwa 1
itu mengubah pernyataan sebelumnya. Atau Anda mungkin berpikir 1
adalah alias untuk {print}
, yang secara teknis tidak benar.
Sebenarnya, 1
adalah pernyataan yang sepenuhnya terpisah. Anda dapat memisahkan pernyataan seperti ini:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'
Setiap format pernyataan awk adalah condition {action}
. Jika tidak ada yang {action}
diberikan, maka tindakan standarnya adalah {print}
. (Jika tidak ada yang condition
diberikan, maka kondisi default adalah true
.)
Jadi di sini, 1
adalah kondisi, yang selalu dievaluasi true
karena bukan nol. Itu action
dihilangkan, jadi default {print}
dilakukan. Anda bisa memikirkannya seperti ini:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'