我有一个结构化文本文件test.tr
,我想用 AWK 脚本对其进行分析,但出于特殊原因,我想获取所有用下划线括起来的数字,例如:_0_
应该变成0
。这是输入文本文件的示例:s 0.000000000 _0_ RTR
因此我尝试使用cut
AWK 脚本中的命令,如下所示:
# 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 并且awk
是awk
。您也不能perl
在脚本中使用命令awk
。
如果您希望脚本中存在外部程序,则需要使用命令system
,但对于您在这里所做的事情,您应该使用awk
诸如substr
和之类的字符串函数gensub
。