awk:算术不适用于特定字段

awk:算术不适用于特定字段

我有几行,例如:

N2O       + M       = N2       + O     + M          1.300E+11  0.00  59620.0

我需要用一个不能与 一起使用的因子来替换倒数第三个字段awk。但是,如果我在最后一个字段甚至倒数第二个字段上应用相同的表达式,它就会起作用。我分别用科学计数法和 进行了测试awk,它有效。示例如下:

#works as expected; last field gets multiplied by -1
echo "N2O       + M       = N2       + O     + M          1.300E+11  0.00  59620.0" | awk '{gsub($(NF),-1.0*$(NF))};{print}'
N2O       + M       = N2       + O     + M          1.300E+11  0.00  -59620

#does not work; third from last field stays unchanged
echo "N2O       + M       = N2       + O     + M          1.300E+11  0.00  59620.0" | awk '{gsub($(NF-2),-1.0*$(NF-2))};{print}'
N2O       + M       = N2       + O     + M          1.300E+11  0.00  59620.0

关于为什么会发生这种情况有什么建议吗?

答案1

答案可以在人 awk:

通过替换将数值表达式转换为字符串表达式sprintf(CONVFMT, expr), 除非表达式可以在主机上表示为精确整数,然后将其转换为sprintf("%d", expr).
斯普林特夫()sprintf(3)是一个 AWK 内置函数,它复制, 和的功能卷积FMT是一个内置变量,用于从数字到字符串的内部转换,并初始化为"%.6g".

所以当你调用gsub使用字符串操作的函数时awk已将字段转换为sprintf("%d", 1.300E+11)130000000000但行中没有此类文本,因此无需替换。

相关内容