因为对脚本这东西用的比较少,所以研究的时候研究的比较浅一点,所以一碰到一些理所当然的事情都出错时就比较纳闷了,这里记录一下编写时碰到的一些小问题,以便以后在次碰到:
1.
- [root@localhost Desktop]# cat /proc/net/dev
- Inter-| Receive | Transmit
- face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
- lo: 2589538 25549 0 0 0 0 0 0 2589538 25549 0 0 0 0 0 0
- eth0:124378280 108607 0 0 0 0 0 0 10183369 86606 0 0 0 0 0 0
这样当我用AWK输出它们的例数时就疑惑了:
- $0 = " " $0;
- print(NF);
- if (NF == 18) {
- parseRawData($2, $3, $11, currentData, ifnamearr);
- }
竟然输出了
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 这样的形式.