在 AWK 脚本中替换 cut 命令

在 AWK 脚本中替换 cut 命令

我有一个结构化文本文件test.tr,我想用 AWK 脚本对其进行分析,但出于特殊原因,我想获取所有用下划线括起来的数字,例如:_0_应该变成0。这是输入文本文件的示例:s 0.000000000 _0_ RTR

因此我尝试使用cutAWK 脚本中的命令,如下所示:

# AWK script
BEGIN{
 # initialization
 highest_node_id = 0;
}
{
    node_id = $3
    node_id = node_id | cut -d "_" -f2 | cut -d "_" -f1 ;# this line causes error 
    if (node_id > highest_node_id) {
        highest_node_id = node_id;
    }
}
END{
 #print results
}

但我收到一个错误

awk: `analyze.awk: line 37: syntax error at or near cut`

而在 Bash 脚本中,相同的命令却可以正常运行。

我应该怎么办?

答案1

我终于通过使用以下方法让它工作了substr

tmp_node_id = $3;
node_id = substr(tmp_node_id, 2, (length(tmp_node_id) - 2));
printf ("node %s\n", node_id);

答案2

cut在脚本中可以工作bash,但是 shell 就是 shell 并且awkawk。您也不能perl在脚本中使用命令awk

如果您希望脚本中存在外部程序,则需要使用命令system,但对于您在这里所做的事情,您应该使用awk诸如substr和之类的字符串函数gensub

相关内容