我有以下命令:
cat $1 | while read line; do p_k=`echo "$Q*($k/$N)" | bc -l` ; awk -v col="$col_prob" -v pvaluek="$p_k" '{if($col_prob<=pvaluek) print $0}'; k=$((k+1)); done > $out_file &
这样的输入文件$ 1:
XXX 405 0 307 98 G 3.9158562774e-33
YYY 401 4 344 61 G 2.28798061371e-15
我想比较计算出的概率pvalue_k与文件col_prob中的概率的每一行,并且只有当它更小时才打印该行。
但是awk
命令不会更新pvaluek
答案 0 :(得分:1)
你可以在AWK中完成整个循环:
awk -v Q="$Q" -v k="$k" -v N="$N" -v col="$col_prob" '{ p_k=Q*k/N; k++ } $col+0<=p_k { print $0 }' $1 > $out_file
此解决方案更短,并且比bash循环更快。
我不知道您的变量Q
,k
,N
,col_prob
的值是什么,但是这样可行:
Q=10e-10
k=1
N=10e+10
col_prob=7
awk -v Q="$Q" -v k="$k" -v N="$N" -v col="$col_prob" '{ p_k=Q*k/N; k++ } $col+0<=p_k { print $0 }' YOURFILE
输出:
XXX 405 0 307 98 G 3.9158562774e-33
P.S。请选择&#34;最佳答案&#34;如果答案适合你。我从你的历史中看到你以前从未这样做过。你应该。