使用awk bash脚本

时间:2018-04-19 16:15:49

标签: bash awk

我有以下命令:

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

的值

1 个答案:

答案 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循环更快。

我不知道您的变量QkNcol_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;如果答案适合你。我从你的历史中看到你以前从未这样做过。你应该。