2017-04-19 10 views
2

2 열의 텍스트 파일이 있습니다.특정 줄의 숫자 평균 찾기

10 2 
20 3 
30 4 
40 5 
50 6 
60 7 
70 8 
80 9 
90 10 
100 11 
110 12 
120 13 
130 14 

나는 6 라인에서 2 열 데이터의 평균을 찾을 싶습니다. 즉 ((7 + 8 + 9 + 10 + 11 + 12 + 13 + 14) = 10.5/8) I이 포스트 Scripts for computing the average of a list of numbers in a data file 을 찾아 다음 사용될 수

:

awk'{s+=$2}END{print "ave:",s/NR}' fileName

을 하지만 전체 두 번째 열 데이터의 평균을 얻을.

여기에 힌트가 있습니다.

+0

당신은 무엇을 시도? 우리 중 대부분은 기꺼이 공예품을 개선하는 데 도움을 주지만, 짧은 주문을받지 않은 프로그래밍 직원으로는 덜 행복합니다. 지금까지의 작업을 [MCVE] (http://stackoverflow.com/help/mcve)에서 여러분이 기대했던 결과와 여러분이 얻은 결과 (또는 오류)를 보여 주면 그것을 이해하도록 도와 줄 것입니다. – ghoti

+0

개인적으로 제 예제가 충분히 명확하게 설명되어 있다고 생각합니다. 내가 언급 한 게시물에서 사용할 수있는 스 니펫을 시도했다. 하지만 당신을위한 여기 있습니다. awake '{s + = $ 2} END {print "ave :", s/NR}'fileName –

+0

@SaideepPavuluri : 15 개 이상의 라인으로 실제 파일을 만들고 원하는 것을 보여줄 수 있습니까? – Inian

답변

2

이 한 줄이 수행해야합니다

awk -v s=6 'NR<s{next} {c++; t+=$2} END{printf "%.2f (%d samples)\n", t/c, c}' file 

이 awk 스크립트는 세 가지 패턴/액션 쌍을 가지고있다. 첫 번째는 첫 번째 s 행을 건너 뜁니다. 두 번째 줄은 모든 줄에서 실행됩니다 (이후 s부터). 카운터를 증가시키고 누적 합계에 열 2를 추가합니다. 모든 데이터가 처리 된 후 세 번째 프로세스가 실행되고 결과가 인쇄됩니다. 작업을 수행해야 스크립트 아래

+0

'NR

+1

@EdMorton, 그건 사실입니다, 당신의 제안은 기능적으로 동일합니다. 그것은 또한 gawk에서 약간 더 빨라 보인다. 그러나 BSD awk에서는 솔루션이 약 5 % 느려집니다. 문제를 해결할 수있는 방법이 너무 많아서 좋았습니다. ;-) 또한, 0으로 나누기, 다시 말해서 좋은 점입니다. 하지만 샘플의 평균이 정의되지 않았기 때문에 (또는 합법적 인 오류) 0이 아니기 때문에 제 답변에 추가하지 않겠습니다. – ghoti

0

awk 'NR>=6{avg+=$2}END{printf "Average of field 2 starting from 6th line %.1f\n",avg/(NR-5)}' file 

출력

Average of field 2 starting from 6th line 10.5