Bir değişkeni yazdırmak istediğimde neden awk bütün satırı basıyor?


24

Yazarken:

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

Çıktının olmasını bekliyorum content. O neden foo bar?


8
$$ Var den çıkarmayı deneyin
taliezin 21:16

Aslında. Bash sözdizimi ile karıştırıldım ...
nicoco

Bu iyi bir soru ve cevap $yanlış yerleştirildiğini gösterse de yazım hatası olarak kapatılması gerektiğinden emin değilim. Son zamanlarda bunlardan birkaçını gördüm, belki de kanonik
olana

Yanıtlar:


45

Değişkenler, içinde vardeğil, adlarıyla $varbelirtilir awk. th alanını$n ifade eder : ilk alan için, ikincisi için ... ya da == 0 için tüm kayıt ( tam kayıt).n $1$2n$0

Bunlar gerçek rakamlar olmak zorunda değil. Sen kullanabilir $(1+1)ya $variable. Eğer variableiçeriyorsa 1, $variableilk alan olacaktır. Yaygın olarak kullanılan bir tanesi $NFson alan içindir ( NFalan sayısını içeren özel değişkendir).

Örnekte olduğu gibi, değişken bir sayı içermiyorsa, sayı olmayan 0 olarak anlaşılır.

Yani var="content"; print $var, aynı var=0; print $varve dolayısıyla aynı print $0, tüm rekoru yazdırıyor.

Burada istediğin şey:

echo "foo bar" | gawk -v var="content" '{print var}'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.