Mengapa awk mencetak seluruh baris ketika saya ingin mencetak variabel?


24

Saat saya mengetik:

echo "foo bar" | gawk -v var="content" '{print $var}'

Saya mengharapkan hasilnya content. Kenapa begitu foo bar?


8
Coba hapus $dari $ var
taliezin

Memang. Saya bingung dengan sintaks bash ...
nicoco

Ini pertanyaan yang bagus dan meskipun jawabannya menunjukkan bahwa $itu salah tempat, saya tidak yakin itu harus ditutup sebagai salah ketik. Saya telah melihat beberapa di antaranya baru-baru ini, jadi mungkin kita perlu yang kanonik
roaima

Jawaban:


45

Variabel dirujuk dengan nama seperti dalam var, bukan $vardalam awk. $nmerujuk ke bidang nth : untuk bidang pertama, untuk yang kedua ... atau seluruh catatan untuk == 0 ( adalah catatan penuh).$1$2n$0

Itu tidak harus angka harafiah. Anda bisa menggunakan $(1+1)atau $variable. Jika variableberisi 1, maka $variableakan menjadi bidang pertama. Yang umum digunakan adalah $NFuntuk bidang terakhir ( NFadalah variabel khusus yang berisi jumlah bidang).

Jika, seperti dalam contoh Anda, variabel tidak berisi angka, yang non-angka dipahami sebagai 0.

Jadi var="content"; print $var, sama dengan var=0; print $var, dan dengan demikian sama dengan print $0, yaitu mencetak seluruh catatan.

Yang Anda inginkan di sini adalah:

echo "foo bar" | gawk -v var="content" '{print var}'
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.