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
以便它需要参数。但这也不起作用。有人可以帮忙吗?
答案 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。