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

标签 linux bash for-loop awk samtools

我希望在 awk 的每一行输出以下内容:

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 和各种各样的东西但没有成功。谢谢!

最佳答案

解决方案

改编自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

关于linux - 在管道 awk 输出上打印循环输入文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47091464/

相关文章:

PHP is_writable() 函数对于可写目录总是返回 false

android - Genymotion 不想加星

c - 用于匹配非 ASCII 流中的模式的 Regcomp 替代方案

linux - 如何获取我从 shell 脚本执行的命令列表的 PID

C - 我的 scanf 永远不会停止接受输入

matlab - 如何在 Matlab 中向量化这个 for 循环?

linux - Raspberry Pi 临时网络

linux - eval as if 语句条件

android - 在Macbook Pro上从gradle.build中的.bashrc访问路径

PHP MYSQL 关联数组和表