awk命令中的参数

时间:2015-02-09 12:00:50

标签: unix awk

for var in 1 2 3 4 5 6 7 8 9 10
do
echo $var
export lower_bound=$((($var - 1) * 10))
echo $lower_bound
export upper_bound=$(($var * 10))
echo $upper_bound
awk '$2 >= $(($lower_bound)) && $2 < $(($upper_bound))' shubham_test.txt > file_$var.txt
#awk -v var1="$lower_bound" -v var2="$upper_bound" '{$2 >= $var1 && $2 < $var2}' shubham_test.txt > file_$var.txt
done

我正在尝试根据unix中文本文件中字段的值拆分文件。当我将硬编码值传递给caompare但是如果我通过变量进行比较(upper_bound和lower_bound)时,awk无法正常工作。

我查了一下,甚至用以下内容替换了awk命令:

awk -v var1="$lower_bound" -v var2="$upper_bound" '{$2 >= $var1 && $2 < $var2}' shubham_test.txt > file_$var.txt

以便它需要参数。但这也不起作用。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

你的第二种格式应该可以使用,但是没有变量名的$ - 所以:

awk -v var1="$lower_bound" -v var2="$upper_bound" '{$2 >= var1 && $2 < var2}' shubham_test.txt

您的第一个版本失败,因为单引号表示unix shell不评估$ lower_bound变量,而是将整个文字字符串传递给awk。如果您正在编写shell脚本,则必须知道如何使用单引号,双引号和后引号 - 例如,请查看http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm