将用户值传递给AWK中的变量。我错过了什么?

时间:2015-08-03 14:32:18

标签: linux r shell math awk

我有一个表格文件

 V1      V2      V3   V4      V5 V6       V7      V8      V9
chr1 3670715 3671052  338 3670940  8  4.18708 3.36070 2.11284
chr1 3671795 3672053  259 3671953 14  7.60682 4.53642 5.15603
chr1 4491782 4493687 1906 4491915 20 11.42107 5.49862 8.69791
chr1 4491782 4493687 1906 4492254 18  8.58343 4.41588 6.05103
chr1 4491782 4493687 1906 4492555 11  5.49023 3.77545 3.25097
chr1 4491782 4493687 1906 4492907 16  8.45705 4.66761 5.94094

我正在使用用户输入的值对文件应用多个过滤,但结果不正确。

我的shell脚本

# Run : sh filter.sh 5 10 20 
fc=$2; pVal=$3; tags=$4
sed 1,29d $1 | awk '$6>int("'$tags'") && $7>int("'$pVal'") && int($8)>int('"$fc"')' | wc -l 

我正在使用3个值并过滤文件(前29行是标题)但输出错误。我签了R,它应该是18967但是使用上面我得到13608。我在值变量周围使用了int函数但是徒劳无功。我应该重新格式化我的变量值还是我错过了什么。

由于

1 个答案:

答案 0 :(得分:2)

awk中没有数学错误。

您需要使用-v name=val将参数传递给awk并简化您的awk命令:

awk -v tags=$tags -v pVal=$pVal -v fc=$fc '$6>tags && $7>pVal && int($8)>fc'