在重定向中函数调用错误的awk

时间:2013-05-29 06:38:24

标签: function redirect awk

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
卡住了不知道该怎么做 请帮忙

2 个答案:

答案 0 :(得分: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

按预期

答案 1 :(得分:1)

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

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

此外,$dec不是dec的值,而是字段编号dec 的值。再说一遍,awk不是shell。你更喜欢这样的东西:

$ awk 'BEGIN {dec = 21; printf "%d+%d\n", dec, dec | "bc"}' /dev/null
42