本帖最后由 donggua0713 于 2011-04-21 17:49 编辑
大家好,请大家帮忙看看我的问题:
这个语句,注意有$1=""
awk -v sn=$sn 'BEGIN { FS=",";OFS="@" } { $1=""; if ($2 ~ /^T/) print sn$0 }' $1
返回结果如下:
108985C@T0001@21.1@53.9@11.7@13.2
108985C@T0002@0.2@0.2@1.2@98.4
这个语句,没有$1=""
awk -v sn=$sn 'BEGIN { FS=",";OFS="@" } { if ($2 ~ /^T/) print sn$0 }' $1
108985CCPU01,T0001,21.1,53.9,11.7,13.2
108985CCPU01,T0002,0.2,0.2,1.2,98.4
这是为什么呢?为什么非要在if前面多执行一个语句,OFS才生效呢?但是我需要不下面那个语句的结果啊。
$1源文件 的片段如下:
CPU01,CPU 1 aix2,User%,Sys%,Wait%,Idle%
CPU01,T0001,21.1,53.9,11.7,13.2
CPU01,T0002,0.2,0.2,1.2,98.4
CPU01,T0003,0.2,0.0,0.8,99.0
CPU01,T0004,0.0,0.2,0.4,99.4
CPU01,T0005,0.0,0.2,0.2,99.6
CPU01,T0006,0.4,0.0,0.8,98.8
CPU01,T0007,0.0,0.2,2.0,97.8
CPU01,T0008,0.0,0.0,0.2,99.8
CPU01,T0009,0.4,0.2,0.6,98.8
CPU01,T0010,0.2,0.2,0.8,98.8
CPU01,T0011,0.0,0.2,0.4,99.4
CPU01,T0012,0.0,0.6,0.4,99.0
CPU01,T0013,0.2,0.2,0.8,98.8
CPU01,T0014,0.2,0.6,0.4,98.8
CPU01,T0015,0.4,0.2,0.6,98.8
原来是这样,OFS需要把$0给处理一下之后,才会有改动,如果$0没有处理过,则OFS是不起作用的,所以可以这样:
awk -v sn=$sn 'BEGIN { FS=",";OFS="@" } { $1=$1;if ($2 ~ /^T/) print sn$0 }' splitfile/aix2.CPU01
但是为什么awk需要这么做呢? |