如何在循环中打印文件名?我想在同一行打印文件名和第4列的平均值:
for i in `ls *cov`
do
awk '{sum +=$4;n++}END{print sum/n}' $i
done
我的意思是我想
awk '{sum +=$4;n++}END{print $i\t sum/n}' $i
答案 0 :(得分:1)
您可以使用-v
标志在awk脚本中使用bash变量:
awk -v file=$i '{sum +=$4;n++}END{print file\t sum/n}' $i
但是,还有built in awk variable FILENAME
:
awk '{sum +=$4;n++}END{print FILENAME\t sum/n}' $i
由于你没有绕过变量,所以更清洁。
答案 1 :(得分:1)
丢失循环(参见why-is-using-a-shell-loop-to-process-text-considered-bad-practice)并使用:
awk -v OFS='\t' '{sum+=$4} ENDFILE{print FILENAME, (FNR>0 ? sum/FNR : 0); sum=0}' *cov
以上使用GNU awk for ENDFILE,对其他awks进行了简单的调整,但重要的是:
n
。