因为对脚本这东西用的比较少,所以研究的时候研究的比较浅一点,所以一碰到一些理所当然的事情都出错时就比较纳闷了,这里记录一下编写时碰到的一些小问题,以便以后在次碰到:

1.

  1. [root@localhost Desktop]# cat /proc/net/dev 
  2. Inter-|   Receive                                                |  Transmit 
  3.  face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed 
  4.     lo: 2589538   25549    0    0    0     0          0         0  2589538   25549    0    0    0     0       0          0 
  5.   eth0:124378280  108607    0    0    0     0          0         0 10183369   86606    0    0    0     0       0          0 

这样当我用AWK输出它们的例数时就疑惑了:

 

  1. $0 = " " $0; 
  2.     print(NF); 
  3.     if (NF == 18) { 
  4.         parseRawData($2, $3, $11, currentData, ifnamearr); 
  5.     } 

竟然输出了

5
17
19
18

疑惑一:为什么三四行同样的列数,而打出的值的列数不一样,

二:把$0=" " $0删除之后数字变成了

4 17 19 18

为什么其它行没有减少。

 

后来经master一说才明白,AWK的FS为空格,当你数据前面有空格时,就会多出一列。例如:

a,b,c  这样如果FS=,的话,结果就会是3列。

如果是,a,b,c  这样的话就会是4列,第一列就会是一个空字符,什么都没有。

如果这样说疑惑就解开了,

因为每行前面加空格后就第一行没有空格,所以它一加空格就会多出一列,而其它行已经有空格了,在加一空格也没影响。

而第三行为19,第四行为18,是lo: 2589538之间有:和空格二个分隔符。因为这时的FS=[ :],所以形式为:

a,:b,c  与   a,b,c   这样的形式.