Đúng cho awk là một chuỗi không trống hoặc một số khác không (với các số là số nguyên thập phân hoặc dấu phẩy động và với một số triển khai awk thập lục phân hoặc bát phân cũng được hỗ trợ). Những thứ được đặt trong dấu ngoặc kép là các chuỗi, số không được trích dẫn là số, nhưng đối với bất kỳ thứ gì khác, có các quy tắc phức tạp để xác định xem một cái gì đó sẽ được coi là một chuỗi hay một số. awk
Hướng dẫn GNU có cả một chương về điều đó .
Thật:
awk '1'
(số khác không)
awk '1e8'
(số khác không)
awk '-0.01'
(số khác không)
awk '"foo"'
(chuỗi không trống)
awk '"0"'
(chuỗi không trống)
awk '0 ""'
(nối ghép mang lại một chuỗi mà ở đây không trống)
echo 0 | awk '$1 ""'
(tương tự cho trường $ n)
awk 'substr("000", 1, 1)'
(kết quả substr()
luôn là một chuỗi)
echo '0foo' | awk '$0'
($ 0 là một chuỗi không phải là số nên được coi là một chuỗi (không trống))
Sai:
awk '0'
(0 số)
awk '""'
(chuỗi trống)
echo 0000e123 | awk '$1'
($ 1 được coi là một số nếu đó là một chuỗi số ở đây và là 0)
echo ' 0 ' | awk '$0'
(khoảng trắng ở đầu và cuối được bỏ qua để xác định xem một chuỗi có phải là số không).
awk '" 2foo" - 2'
(một chuỗi liên quan đến biểu thức số học được chuyển đổi thành một số có bất kỳ thứ gì vượt quá số bị bỏ qua)
awk 'unset_or_empty_variable'
(chuỗi trống)
awk '"non-numerical-string" + 0'
YMMV:
awk '1e-500'
(một số sẽ phàn nàn, một số sẽ coi nó là 0)
awk '"0x1" + 0'
(không phải tất cả triển khai awk hỗ trợ hexadecimals, trên những mà "0x1"
được chuyển thành 1
, trong người khác 0
. Một số phiên bản của đặc tả POSIX hiện thực vô tình cần thiết để hỗ trợ con số hex đó và nó được rút lại sau đó. Tuy nhiên gawk
không nhận ra rằng số hex khi POSIXLY_CORRECT
đang ở trong môi trường)
awk '010 - 8'
(tương tự (cũng không hoàn toàn như 010 theo nghĩa đen ở đây trái ngược với chuyển đổi từ một chuỗi) cho các quãng tám)
awk '0x1 - 1'
(trên các awk
triển khai không hỗ trợ các số hex, 0x1
là phép nối 0
và x1
biến mang lại "0"
số được chuyển đổi thành một số (0), nếu bạn trừ đi số 1
bạn nhận được -1
là số khác không).
Điều đó có nghĩa là nếu bạn muốn kiểm tra xem một chuỗi có trống không, bạn không nên làm:
awk '$ 1 {in $ 1, "không trống"}'
Nhưng
awk '$1 != "" {print $1, "is not empty"}'
Nếu không, nó sẽ không nói 0
hoặc -0000E+00001234
không trống rỗng.
any_integer
tôi cho rằng bạn có nghĩa là số theo nghĩa đen như7, 89
vv .. nếu vậy, lý do là bất kỳ số nào ngoài điều kiện0
có nghĩa làtrue