awk array subscriptor type

來源:互聯網
上載者:User

awk的array是關聯陣列,由於awk允許string和numeric相互操作,所以需要小心當使用numeric和string作為array下標時的區別。

awk的array的下標都是string類型,對於Non-string類型的下標,將首先將Non-string轉換成string,在進行索引。
awk有一個內建變數CONVFMT用於完成numeric到string的轉換,我們可以改變CONVFMT來改變轉換的結果,當然對於integer,CONVFMT不影響轉換結果。預設的CONVMT為"%.6g"。

awk 'BEGIN { print CONVFMT }'

輸出將是"%.6g"

對於使用integer和其對應的string作為索引,我們將得到同一個value

 BEGIN {     # integer index     a[0] = 1     # string index     a["0"] = 2     print a[0] # 2     print a["0"] # 2 }

這裡0將被轉換成"0",所以最後我們只得到一個2,1已經被覆蓋了。GUN awk manual中有個例子,說明了array下標的問題。

xyz = 12.153data[xyz] = 1CONVFMT = "%2.2f"if (xyz in data)    printf "%s is in data/n", xyzelse    printf "%s is not in data/n", xyz

這裡將輸出12.153 is not in data,原因就是xyz在作為數組下標前,根據CONVFMT進行了轉換,而我們在對data[xyz]賦值時,
使用的是"%.6g",於是xyz轉換為"12.153",而在 if 判斷中,我們已經改變了CONVFMT,此時xyz為"12.15",所以被認為不在data中。

reference:
[1]
7.7 Using Numbers to Subscript Arrays

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.