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

Randhir Singh
sumber
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).

Kevin
sumber
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}
'
Wisbucky
sumber
5

1 artinya mencetak setiap baris.

Pernyataan awk sama dengan menulis:

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