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