apa arti dari 1 di akhir skrip awk


19

Saya sedang membaca skrip awk ini

awk -F"=" '{OFS="=";gsub(",",";",$2)}1'

Saya ingin tahu apa fungsi 1di akhir itu


Anda juga bisa melakukannyaawk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
GypsyCosmonaut

Jawaban:


24

Suatu awkprogram 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 1akhir 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).


7

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 1itu mengubah pernyataan sebelumnya. Atau Anda mungkin berpikir 1adalah alias untuk {print}, yang secara teknis tidak benar.

Sebenarnya, 1adalah 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 conditiondiberikan, maka kondisi default adalah true.)

Jadi di sini, 1adalah kondisi, yang selalu dievaluasi truekarena bukan nol. Itu actiondihilangkan, jadi default {print}dilakukan. Anda bisa memikirkannya seperti ini:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'

5

1 artinya mencetak setiap baris.

Pernyataan awk sama dengan menulis:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.