如果awk中的语句不像预测的那样工作

时间:2016-05-29 15:20:43

标签: shell unix awk

我的第二列值从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

2 个答案:

答案 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}'