2016-09-08 2 views

답변

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 참조) 잃을 그냥 사용 : 위의 ENDFILE에 대한 GNU AWK를 사용하는

awk -v OFS='\t' '{sum+=$4} ENDFILE{print FILENAME, (FNR>0 ? sum/FNR : 0); sum=0}' *cov 

, 다른 AWKS에 대한 간단한 개조하면 되겠 어있다하지만 중요한 사항은 다음과 같습니다 주변

  1. 셸 루프는 필수도 아니며 바람직하지도 않습니다.
  2. awk에 내장 변수가 있으므로 변수 n이 필요하지 않습니다.
  3. 빈 파일은 0으로 나누지 않아야합니다.
관련 문제