3
awk -F "|" 'function decToBin(dec) { printf "ibase=10; obase=2; $dec" | bc; } BEGIN {print $3" "$4" "$5" "$6" "$7" "decToBin($8)}' $Input

其中 Input 是文件的路径

1|2|1.00|0.46|0.44|1.12|49.88|3
2|2|1.00|0.45|0.55|1.13|50.12|11

它在没有函数调用的情况下正常工作,但在引入函数 decToBin() 后它给出了错误。它给出了错误

awk: fatal: expression for `|' redirection has null string value

卡住了 不知道该怎么做 请需要帮助

4

2 回答 2

3

myawkscript.awk:

function decToBin(dec) {
    cmd="echo 'ibase=10; obase=2;" dec ";'|bc";
    cmd|getline var
    return var
}

//{print $3" "$4" "$5" "$6" "$7" "decToBin($8)}

然后

gawk -F"|" -f myawkscript.awk myfile

给你

1.00 0.46 0.44 1.12 49.88 11
1.00 0.45 0.55 1.13 50.12 1011

正如预期的那样

于 2013-05-29T07:15:47.407 回答
1

这是行不通的。bc被视为变量的名称,而不是命令的名称(awk 的行为不像 shell)。由于变量未定义,因此将其视为空字符串。您必须引用命令名称:

$ awk 'BEGIN {printf "1+1\n" | "bc"}' /dev/null
2

另外,$dec不是 的值dec,而是字段号 dec的值。同样,awk 不是外壳。你宁愿想要这样的东西:

$ awk 'BEGIN {dec = 21; printf "%d+%d\n", dec, dec | "bc"}' /dev/null
42
于 2013-05-29T07:00:31.277 回答