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: