bash-2.03# cat > 1 bash# cat 1 | awk '{if ($1= ) print $0}' 怎么變成了20.30了?

熱心網友

由于寫成了$1= ,所以awk認為$0,在本例里也就是$1的值為 ,而 不是一個數字,awk再進一步解釋為1。2和0。3和0。4,顯示結果還不以空格分開,所以顯示 應該是這樣吧。[/quote:6bd795b3ef] 我們知道,首先,與c/c++,java等相比,awk是一種弱類型語言。你不需要提前聲明就可以使用變量,變量的類型轉換也是隱含的,在某一語境(上下文)下它可能用作數字,在另一語境下它可能就用作字符串。 另外一個需要小心的地方就是awk的字符串連結操作,這個操作沒有任何操作符,只要把需要連結的串并列寫在一起就可以了。 [code:1:6bd795b3ef]$ echo|awk '{a=1。234;var=a" is a number";print var}' 1。234 is a number [/code:1:6bd795b3ef] 這里a首先被轉換為字符串,然后與" is number"連接,賦給var。 [code:1:6bd795b3ef]$ echo|awk '{a="1。234kilo";var=a+1;print var}' 2。234 [/code:1:6bd795b3ef] 數值語境,a先轉換成1。234,然后參與計算。 這樣下面的結果就容易理解了: [code:1:6bd795b3ef]$ echo|awk '{var= ;print var}' [/code:1:6bd795b3ef] 由于沒有引號,這里的語境首先是數字語境,awk先依次取得三個數字:"1。2", "。3", 和"。4",但是三個數字之間沒有任何操作符地并列在一起,awk就認為要進行字符串連接,三個數字被轉換為字符串后連接了起來,即:"1。2" "0。3" "0。4" == 。 再舉幾個例子: [code:1:6bd795b3ef]$ echo |awk '{var=1 2 3 4;print var}' #equivlent to: "1" "2" "3" "4" 1234 $ echo |awk '{var=1 2 a 3 4;print var}' #equivlent to: "1" "2" "" "3" "4" 1234 $ echo |awk '{a="abc";var=1 2 a 3 4;print var}' #equivlent to: "1" "2" "abc" "3" "4" 12abc34 $ echo |awk '{a=2。5;var=1 2 a 3 4;print var}' #equivlent to: "1" "2" "2。5" "3" "4" 122。534 $ echo|awk '{var=1 2 3 4 $1與$2連接后整體輸出, print $1,$2 == $1與$2依次輸出。 總之awk的數字和字符串類型轉換相當靈活方便,字符串連接尤其容易迷惑人(confusing),但是我們心里必須清楚我們要做什么,別把自己搞糊涂了!。

熱心網友

由于寫成了$1= ,所以awk認為$0,在本例里也就是$1的值為 ,而 不是一個數字,awk再進一步解釋為1。2和0。3和0。4,顯示結果還不以空格分開,所以顯示 應該是這樣吧。[/quote:6bd795b3ef] 我們知道,首先,與c/c++,java等相比,awk是一種弱類型語言。你不需要提前聲明就可以使用變量,變量的類型轉換也是隱含的,在某一語境(上下文)下它可能用作數字,在另一語境下它可能就用作字符串。 另外一個需要小心的地方就是awk的字符串連結操作,這個操作沒有任何操作符,只要把需要連結的串并列寫在一起就可以了。 [code:1:6bd795b3ef]$ echo|awk '{a=1。234;var=a" is a number";print var}' 1。234 is a number [/code:1:6bd795b3ef] 這里a首先被轉換為字符串,然后與" is number"連接,賦給var。 [code:1:6bd795b3ef]$ echo|awk '{a="1。234kilo";var=a+1;print var}' 2。234 [/code:1:6bd795b3ef] 數值語境,a先轉換成1。234,然后參與計算。 這樣下面的結果就容易理解了: [code:1:6bd795b3ef]$ echo|awk '{var= ;print var}' [/code:1:6bd795b3ef] 由于沒有引號,這里的語境首先是數字語境,awk先依次取得三個數字:"1。2", "。3", 和"。4",但是三個數字之間沒有任何操作符地并列在一起,awk就認為要進行字符串連接,三個數字被轉換為字符串后連接了起來,即:"1。2" "0。3" "0。4" == 。 再舉幾個例子: [code:1:6bd795b3ef]$ echo |awk '{var=1 2 3 4;print var}' #equivlent to: "1" "2" "3" "4" 1234 $ echo |awk '{var=1 2 a 3 4;print var}' #equivlent to: "1" "2" "" "3" "4" 1234 $ echo |awk '{a="abc";var=1 2 a 3 4;print var}' #equivlent to: "1" "2" "abc" "3" "4" 12abc34 $ echo |awk '{a=2。5;var=1 2 a 3 4;print var}' #equivlent to: "1" "2" "2。5" "3" "4" 122。534 $ echo|awk '{var=1 2 3 4 $1與$2連接后整體輸出, print $1,$2 == $1與$2依次輸出。 總之awk的數字和字符串類型轉換相當靈活方便,字符串連接尤其容易迷惑人(confusing),但是我們心里必須清楚我們要做什么,別把自己搞糊涂了! | 我也來回答 | 我來評論 | 投訴 |↑回頁首 | 。

熱心網友

由于寫成了$1[color=RED:2818d0f9ef]=[/color:2818d0f9ef] ,所以awk認為$0,在本例里也就是$1的值為 ,而 不是一個數字,awk再進一步解釋為1.2和0.3和0.4,顯示結果還不以空格分開,所以顯示 應該是這樣吧。:shock: