2016-09-08 5 views
1

ループ内のファイル名の印刷方法は?私はあなたが-vフラグを使用してawkスクリプトでbashの変数を使用することができますawkループでの挿入方法

awk '{sum +=$4;n++}END{print $i\t sum/n}' $i 

答えて

1

したいわけ

for i in `ls *cov` 
do 
awk '{sum +=$4;n++}END{print sum/n}' $i 
done 

:私は、ファイル名と同じ行の4列の平均値を印刷したいです:

awk -v file=$i '{sum +=$4;n++}END{print file\t sum/n}' $i 

しかし、またbuilt in awk variableFILENAMEあります:

awk '{sum +=$4;n++}END{print FILENAME\t sum/n}' $i 

これは、変数を渡すことがないので、はるかにクリーンです。

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 

上記はENDFILEのためのGNU AWKを使用して、他のawksのための簡単な微調整がありますが、重要なものは以下のとおりです。

  1. 周囲シェルループは必要でもなく望ましいものでもありません。
  2. awkに変数が組み込まれているので、変数nは不要です。
  3. 空のファイルをゼロで割って自分自身を守らなければなりません。
関連する問題