在管道awk输出上打印循环输入文件名

时间:2017-11-03 08:36:59

标签: linux bash for-loop awk samtools

我希望在awk的每一行上打印$ fname以获取以下内容:

for fname in $(ls *.bam | cut -c -9 | uniq)
    do
    echo $fname
    samtools depth  -a "$fname".bam | awk '{sum+=$3} END {print "Average = ", sum/NR}' >> mean.depth
    done

当前输出:

$ less mean.depth  
    Average =  5.40089
    Average =  4.68387

期望的输出:

$ less mean.depth  
    FILENAME1 Average =  5.40089
    FILENAME2 Average =  4.68387

这样输出平均深度是可追踪的。我已经尝试了FILENAME和各种各样的事情,但没有取得成功。谢谢!

1 个答案:

答案 0 :(得分:0)

改编自this answer

使用awk -v var=定义shell变量$ fname,然后使用END {print var

打印它
samtools depth  -a "$fname".bam | awk -v var=$fname '{sum+=$3} END {print var, " = ", sum/NR}' >> mean.depth