Function 重定向中出现函数调用错误的Awk

Function 重定向中出现函数调用错误的Awk,function,redirect,awk,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 它在没有调用函数的情况下工作正常,但在引入函数decToBin()后,它给出了错误。它给出了如下错误: 1|2|1.00|0.46|0.44|1.12|49.88|3 2|2|1.00|0.45|0.

其中输入是文件的路径

awk -F "|" 'function decToBin(dec) { printf "ibase=10; obase=2; $dec" | bc; } BEGIN {print $3" "$4" "$5" "$6" "$7" "decToBin($8)}' $Input
它在没有调用函数的情况下工作正常,但在引入函数decToBin()后,它给出了错误。它给出了如下错误:

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
被卡住了我不知道怎么做
请需要帮助

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

awk: fatal: expression for `|' redirection has null string value
此外,
$dec
不是
dec
的值,而是字段号dec的值。同样,awk不是shell。你想要的是这样的东西:

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

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

给你

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

不出所料

谢谢你,伙计!请告诉我一件事gawk-F“|”-F myscript.awk$Input>$Input为什么它不将输出重定向到同一个文件??因为您无法将文件重定向到自身;重定向会在命令启动前截断目标文件。所以命令会看到一个空的输入文件。好的,谢谢!我是否可以修改myawkscript.awk,将1011改为1 0 1 1,如果您有任何想法,请告诉我…只需在另一个插入空格的函数中包装decToBin($8)。在shell echo中“hello”| sed“s/(.)/\1/g”返回“h he l o”
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