好,为什么我不能手动将值numIterations的值传递给下一个表达式,而对我有用呢?
echo "numIterations $numIterations"
(tr ' ' '\n' | sort | uniq -c | awk '{print "winner " $2 " appeared "$1 " times. Frequency is "$1*100 / $numIterations" %"}') < "final_winners.txt" > "final_output_winners.txt"
这是下面的输出:
numIterations 1000
winner 10 appeared 110 times. Frequency is 100 %
winner 11 appeared 90 times. Frequency is 100 %
...
$ 1是110,$ numIterations是1000,所以结果必须是11%,没有100%
如果我将$ numIterations替换为1000,结果就可以了。
我正在osx 10.14.1中运行bash 3.2。 谢谢。
答案 0 :(得分:1)
您的变量用单引号引起来,因此不会扩展。在awk
部分中,将$numIterations
替换为'"$numIterations"'
。
更好的选择:使用awk -v ni="$numIterations"
设置awk
变量,并在ni
脚本中使用awk
。清楚的示例:
$ x=7
$ echo awk 'BEGIN {print 1 * $x}'
awk BEGIN {print 1 * $x} # this is literally what awk sees
$ awk 'BEGIN {print 1 * $x}'
0 # because $x is not set in awk
$ awk -v x="$x" 'BEGIN {print 1 * x}'
7