1 第5.3節:awk數據類型
??awk并沒有非常嚴格的數據類型,但在編寫代碼的過程中,大致可以分為以下數據類型:
1.1 數字型
#普通表示法
a = 123
b = 123.333
#科學表示法
c = 1.33e13
d = 1.05e-5
代碼示例:
$ echo |awk '{
> print 123
> print 123.333
> print 1.33e13
> print 1.05e-5
> }'
123
123.333
13300000000000
1.05e-05
🕮說明:??在可處理的范圍內,科學計數法的數字輸出時可能會轉換成普通表示法。
1.2 不同進制的表示
??在編寫代碼過程中,可能會用到8進制與16進制的描述,絕大部分編程語言都提供了這些進制的表示方法。
以下是這段內容的翻譯:
數值表示 | 說明 |
---|---|
11 | 十進制值 11 |
011 | 八進制 11,十進制值為 9 |
0x11 | 十六進制 11,十進制值為 17 |
$ gawk 'BEGIN { printf "%d, %d, %d\n", 011, 11, 0x11 }'
輸出:
9, 11, 17
1.3 字符串型
??和大多數編程語言一樣, 字符串使用雙引號來表示:
"string"
代碼示例:
$ echo |awk '{
> print "hello"
> }'
hello
如果文本行比較長,可以使用“\”進行換行書寫, 換行后新行前的空白符需要注意,會被當成字符串的內容:
#!/bin/gawk -f
BEGIN {str = "this is \a long text \with many lines."print str
}
輸出:
this is a long text with many lines.
1.4 正則表達式類型
??正則表達式也是一種數據類型,前面的章節已經介紹過正則表達式的使用,描述正則表達式常量是使用兩條斜線前后包圍該常量,如:/regex/
。
示例1:
if ($0 ~ /^\s*$/)
{...
}
上面的例子中使用了正則表達式常量/^\s*$/
。
示例2:
re = /^\s*$/ #這里的正則表達式賦值是錯誤的!
if($0 ~ re)
{...
}
注:re = /^\s*$/
實際是re = $0 ~ /^\s*$/
的結果。
如:下面的代碼,re
的結果是1
$ echo | awk '{re = /^\s*$/;print re}'
1
如果非要將正則表達式賦值給一個變量該怎么辦呢?可以在賦值時在正則表達式前加一個@
符號:
$ echo | awk 'BEGIN { re = @/^\s*$/} {if($0 ~ re) {print "matched!"}}'
matched!
作者聲明:本文用于記錄和分享作者的學習心得,可能有部分文字或示例來自AI平臺,如:豆包、DeepSeek(硅基流動)(注冊鏈接)等,由于本人水平有限,難免存在表達錯誤,歡迎留言交流和指教!
Copyright ? 2022~2025 All rights reserved.