我的第二列值从0到2000开始,变量$ a设置为13.如果awk中的语句不能正常工作......它会打印所有值。代码:
#!/bin/sh
IFS=- read a b <<< "$1"
echo $a # value is displayed as 13
echo $b # value is displayed as 20... for now it does not matter
sort -r -k 2,2 $2 | awk '{if ($2 > $a) print $2}' # if statement should check which of a second column values are greater than 13, and print them
当我像这样比较我的第二列时,一切都没问题(把13而不是$ a):
sort -r -k 2,2 $2 | awk '{if ($2 > 13) print $2}'
所以我的想法是我在if语句错误
中放了$ a答案 0 :(得分:2)
awk -v var="$a" '{if ($2 > var)print $2}'
应该这样做。您无法直接在awk中访问shell变量。您需要使用-v
选项将shell变量存储到awk变量中。
注意: awk变量不像bash那样需要前面的$
,一个值得注意的例外是访问列/字段(比如$ 1,$ 2等)。
答案 1 :(得分:2)
这是因为shell变量不会用单引号扩展。
awk有一个方便的机制来设置 awk 变量:
awk -v value="$a" '{if ($2 > value) print $2}'
可以写得更“笨拙”
awk -v value="$a" '$2 > value {print $2}'