Awk için true , boş olmayan bir dize veya sıfır olmayan bir sayıdır (sayılar ondalık tam sayı veya kayan nokta ve bazı awk uygulamaları ile onaltılık veya sekizli de desteklenir). Çift tırnak içine alınmış şeyler dizgidir, sıralanmamış değişmez sayılar sayıdır, ancak başka bir şey için bir şeyin dize mi yoksa sayı olarak mı ele alınacağını belirlemek için karmaşık kurallar vardır. GNU awk
kılavuzunun bununla ilgili bir bölümü var .
Doğru:
awk '1'
(sıfır olmayan sayı)
awk '1e8'
(sıfır olmayan sayı)
awk '-0.01'
(sıfır olmayan sayı)
awk '"foo"'
(boş olmayan dize)
awk '"0"'
(boş olmayan dize)
awk '0 ""'
(birleştirme burada boş olmayan bir dize verir)
echo 0 | awk '$1 ""'
($ n alanı için aynıdır)
awk 'substr("000", 1, 1)'
(sonucu substr()
her zaman bir dizedir)
echo '0foo' | awk '$0'
($ 0 sayısal olmayan bir dizedir, bu nedenle dize (boş olmayan) olarak kabul edilir)
Yanlış:
awk '0'
(0 numara)
awk '""'
(boş dize)
echo 0000e123 | awk '$1'
($ 1, burada olduğu ve 0 olduğu sayısal bir dize ise sayı olarak kabul edilir)
echo ' 0 ' | awk '$0'
(bir dizenin sayısal olup olmadığını belirlemek için öndeki ve arkadaki boşluklar yok sayılır).
awk '" 2foo" - 2'
(aritmetik ifadede yer alan bir dize yok sayılan sayıyı aşan bir sayıya dönüştürülür)
awk 'unset_or_empty_variable'
(boş dize)
awk '"non-numerical-string" + 0'
YMMV:
awk '1e-500'
(bazıları şikayet edecek, bazıları 0 olarak kabul edecek)
awk '"0x1" + 0'
(tüm awk'ler anlamına olanlara, Heksadesimalleri destekleyen "0x1"
dönüştürülür 1
için başkalarında, 0
orada o onaltılık numarasını destekleyecek yanlışlıkla gerekli uygulamalar. POSIX şartnamenin bazı sürümü ve daha sonra geri çekilmiş oldu. Hala gawk
zaman o onaltılık numarasını tanımıyor POSIXLY_CORRECT
içindedir Çevre)
awk '010 - 8'
(aynı (sekizlik için dönüştürülmek yerine burada 010 tam anlamıyla değil) sekizli için)
awk '0x1 - 1'
( awk
onaltılık sayıları desteklemeyen uygulamalarda, sıfırdan farklı bir sayı elde ederseniz, çıkarırsanız, bir sayıya (0) dönüştürülen 0x1
birleştirme 0
ve x1
sonuç "0"
veren değişkendir ).1
-1
Bunun anlamı, bir dizenin boş olup olmadığını kontrol etmek istiyorsanız, şunları yapmamanız gerektiğidir:
awk '$ 1 {print $ 1, "boş değil"}'
Fakat
awk '$1 != "" {print $1, "is not empty"}'
Aksi takdirde söylemezdim 0
veya -0000E+00001234
olmayan boş.
any_integer
sana gibi ortalama edebi numarayı varsayalım7, 89
vb .. eğer öyleyse, neden dışında herhangi bir sayıdır0
vasıtatrue
durumuna