GNU/Linux >> Belajar Linux >  >> Linux

apa arti 1 di akhir skrip awk

Sebuah awk program adalah serangkaian pasangan kondisi-aksi, kondisi di luar kurung kurawal dan tindakan dilampirkan di dalamnya. Suatu kondisi dianggap salah jika bernilai nol atau string kosong, yang lainnya benar (variabel yang tidak diinisialisasi adalah nol atau string kosong, bergantung pada konteks, jadi salah). Entah suatu kondisi atau tindakan dapat tersirat; kurung kurawal tanpa syarat (saat milik Anda dimulai) dianggap memiliki syarat benar dan selalu dieksekusi jika dipukul, dan syarat apa pun tanpa tindakan akan mencetak baris jika dan hanya jika syarat terpenuhi.

1 di akhir skrip Anda adalah kondisi (selalu benar) tanpa tindakan, sehingga mengeksekusi tindakan default untuk setiap baris, mencetak baris (yang mungkin telah dimodifikasi oleh tindakan sebelumnya dalam kurung).


Saya sangat tidak menyukai jenis pintasan ini karena mengaburkan dan menyesatkan cara penguraiannya. Saat Anda membaca sesuatu seperti awk -F"=" '{OFS="=";gsub(",",";",$2)}1' , Anda mungkin berpikir bahwa 1 adalah memodifikasi pernyataan sebelumnya. Atau Anda mungkin berpikir 1 adalah alias untuk {print} , yang secara teknis tidak benar.

Sebenarnya, 1 adalah pernyataan yang benar-benar terpisah. Anda dapat memisahkan pernyataan seperti ini:

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

Setiap format pernyataan awk adalah condition {action} . Jika tidak ada {action} diberikan, maka tindakan default adalah {print} . (Jika tidak ada condition diberikan, maka kondisi defaultnya adalah true .)

Jadi di sini, 1 adalah kondisinya, yang selalu bernilai true karena bukan nol. action dihilangkan, jadi {print} default dilakukan. Anda dapat memikirkannya seperti ini:

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

1 artinya mencetak setiap baris.

Pernyataan awk sama dengan menulis:

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

Linux
  1. Arti dari $? Dalam Skrip Shell?

  2. Apa yang dimaksud dengan POSIX?

  3. Apa arti + di akhir izin dari ls -l?

  1. Apa arti dari *nix?

  2. Apa perbedaan antara grep, awk &sed?

  3. Apa arti &di akhir perintah linux?

  1. Apa arti dari tanda dolar ganda di bash/Makefile?

  2. Apa arti dari `! -d` dalam perintah Bash ini?

  3. Apa perbedaan antara menjalankan skrip Bash vs sumbernya?