awk betiğinin sonunda 1'in anlamı nedir


19

Bu awk senaryosunu okuyordum

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

1Sonunda işlevinin ne olduğunu bilmek istiyorum


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

Yanıtlar:


24

Bir awkprogram bir dizi koşul-eylem çiftidir, koşullar kıvırcık ayraçların dışındadır ve bunlara eklenmiş eylemlerdir. Bir koşul sıfır veya boş dizgi olarak değerlendirilirse yanlış kabul edilir, başka herhangi bir şey doğrudur (başlatılmamış değişkenler bağlama bağlı olarak sıfır veya boş dizedir, bu nedenle yanlıştır). Bir koşul veya bir eylem ima edilebilir; koşulsuz parantezlerin (sizinkinin başlamasıyla) gerçek bir koşula sahip olduğu kabul edilir ve vuruldukları takdirde her zaman yürütülür ve eylemsiz herhangi bir koşul, yalnızca koşul yerine getirilirse satırı yazdırır.

1O (parantez içinde önceki eylem tarafından değiştirilmiş olabilir) hattını baskı, her hat için varsayılan eylemi yürütür böylece komut sonunda hiçbir eylem ile bir koşul (her zaman doğru) 'dir.


7

Bu tür kısayollardan gerçekten hoşlanmıyorum çünkü ayrıştırılma şeklini gizliyor ve yanlış yönlendiriyor. Gibi bir şey okuduğunuzda awk -F"=" '{OFS="=";gsub(",",";",$2)}1', bunun 1önceki ifadeyi değiştirdiğini düşünebilirsiniz . Ya da teknik olarak doğru olmayan 1bir takma ad olduğunu düşünebilirsiniz {print}.

Aslında, 1tamamen ayrı bir ifadedir. Aşağıdaki gibi ifadeleri ayırabilirsiniz:

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

Her awk deyimi biçimi condition {action}. Hiçbir orada ise {action}verilen varsayılan eylemdir {print}. ( conditionBelirtilmemişse, varsayılan koşul budur true.)

Burada, sıfır olmadığı için 1her zaman değerlendirilen truedurum söz konusudur. actionAtlanırsa, bu nedenle varsayılan {print}gerçekleştirilir. Bunu şu şekilde düşünebilirsiniz:

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

5

1 her satırı yazdırmak demektir.

Awk deyimi yazmakla aynıdır:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
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.