簡體   English   中英

如何使 awk 系統變量“CONVERT”和“IGNORECASE”工作?

[英]How to make awk system variables ”CONVERT“ and "IGNORECASE" work?

我正在學習awk。 我將代碼編寫為:

awk 'BEGIN{IGNORECASE=1;print match("gridsphere",/D/)}'

我希望這段代碼打印四,但它打印零。

和這個:

awk 'BEGIN{data[10.15]="1200";CONVERT="%d";printf("<%s>",data[10.15])}'

我希望這段代碼打印<>但它打印<1200>

我的問題是為什么變量IGNORECASECONVERT不起作用。

我的系統是 Ubuntu 20.04。

對於您的第一項(IGNORECASE),檢查您的 Ubuntu 系統是使用 gawk(awk 的 GNU 實現)還是 mawk(一種不同的、更傳統的實現)。 Ubuntu 支持安裝其中一個或兩個,如果兩者都安裝,哪個用於名稱awk由“alternatives”包控制; 檢查update-alternatives --display awk IGNORECASE 是一個 gawk 擴展,在 mawk 中不起作用(即它只是一個沒有特殊含義的用戶變量)。

awk 'BEGIN{data[10.15]="1200";CONVERT="%d";printf("<%s>",data[10.15])}'
我希望這個代碼打印<>但它打印<1200>

(更正)幾乎。 CONVERT 不是 awk 的“系統”變量(POSIX 稱這些“特殊”變量,gawk 和 mawk 文檔都稱它們為“內置”或“預定義”)。 CONVFMT是特殊的/內置的,它影響從非整數到字符串的轉換,而不是作為print的直接操作數——比如你的索引/下標; 注意指定字符串不受影響,因為它不進行轉換:

$ mawk 'BEGIN{data[10.15]="X";CONVFMT="%d";print "<"data[10.15]">";print "<"data["10.15"]">"}'
<>
<X>
$ gawk 'BEGIN{data[10.15]="X";CONVFMT="%d";print "<"data[10.15]">";print "<"data["10.15"]">"}'
<>
<X>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM