Awk空间分隔的文件内容

Awk空间分隔的文件内容,awk,Awk,我有一个文件,我想用空格或“\ux”分割它的行 它的格式是 f 5.287102213 _10_ RTR --- 312 cbr 120 [13a a 6 800] ------- [6:0 20:0 29 20] [15] 1 0 s 5.288000000 _0_ AGT --- 322 cbr 100 [0 0 0 0] ------- [0:0 2:0 32 0] [18] 我的awk脚本如下所示: `#!/usr/bin/awk -f BEGIN {FS="[[:space:

我有一个文件,我想用空格或“\ux”分割它的行

它的格式是

f 5.287102213 _10_ RTR  --- 312 cbr 120 [13a a 6 800] ------- [6:0 20:0 29 20] [15] 1 0

s 5.288000000 _0_ AGT  --- 322 cbr 100 [0 0 0 0] ------- [0:0 2:0 32 0] [18]
我的awk脚本如下所示:

`#!/usr/bin/awk -f

BEGIN {FS="[[:space:]]|_"} # use posix space or underscore for FS

{
action = $1;
time = $2;
sta = $4  ; # shifted here because underscores are delimiters
dest = $6;
app = $10;
pkt_size = $11;

#print $1
#print $2
print $5
#print $4
#print $5
#print $6
#print $7
#print $8
#print $9
#print $10

if( action == "s" && dest == "MAC" && app == "cbr"){
            startTime+=time ;
        count++;        
}

if( action == "r" && dest == "MAC" && app == "cbr"){
            endTime+=time   ;
        receivedSize+=pkt_size  ;               
    }


}`
 RTR  --- 312 cbr 120 [13a a 6 800] ------- [6:0 20:0 29 20] [15] 1 0
 AGT  --- 322 cbr 100 [0 0 0 0] ------- [0:0 2:0 32 0] [18] 0 0

 RTR  --- 322 cbr 100 [0 0 0 0] ------- [0:0 2:0 32 0] [18] 0 0
正如在上面的脚本中所看到的,从上面的脚本中,我期望RTR为4美元。 但我发现3美元的产出如下:

`#!/usr/bin/awk -f

BEGIN {FS="[[:space:]]|_"} # use posix space or underscore for FS

{
action = $1;
time = $2;
sta = $4  ; # shifted here because underscores are delimiters
dest = $6;
app = $10;
pkt_size = $11;

#print $1
#print $2
print $5
#print $4
#print $5
#print $6
#print $7
#print $8
#print $9
#print $10

if( action == "s" && dest == "MAC" && app == "cbr"){
            startTime+=time ;
        count++;        
}

if( action == "r" && dest == "MAC" && app == "cbr"){
            endTime+=time   ;
        receivedSize+=pkt_size  ;               
    }


}`
 RTR  --- 312 cbr 120 [13a a 6 800] ------- [6:0 20:0 29 20] [15] 1 0
 AGT  --- 322 cbr 100 [0 0 0 0] ------- [0:0 2:0 32 0] [18] 0 0

 RTR  --- 322 cbr 100 [0 0 0 0] ------- [0:0 2:0 32 0] [18] 0 0

我做错了什么?我是awk的新手

将您的
FS
值更改为
[:space:][uu]+
以获得所需的标记化(拆分为字段)

使用此语句对其进行测试,以查看可识别的字段:

 awk -F'[[:space:]_]+' '{for(i=1;i<=NF;++i){print i ": " $i}}' \
   <<<'f 5.287102213 _10_ RTR  --- 312 cbr 120 [13a a 6 800] ------- [6:0 20:0 29 20] [15] 1 0'

也就是说,如果输入函数中的
字符更像只包含一个字段的分隔符,那么更好的解决方案可能是:

  • 使用默认值
    FS
    ,该值将空格的运行识别为分隔符
  • 要从字段
    $3
    中去除
    \uuu
    分隔符,请执行以下操作:
    gsub(“^ 124;$”,“”,$3)

很抱歉,我之前没有把它标记正确。