awk 배열의 계산 및 합계(및 평균)

awk 배열의 계산 및 합계(및 평균)

날짜와 특정 수량의 해당 측정값이 포함된 데이터 파일이 있습니다. 전체 파일은 13년 분량이며 약 4500개의 데이터 포인트를 포함합니다. 아래에 형식의 예를 제시했습니다. 매일 측정할 필요는 없습니다. 즉, 일부 날짜는 "pbl"이라는 제목의 데이터 열에 있는 빈 값에 해당합니다.

데이터 세트의 각 연도에 대한 관측치 수(즉, 0이 아닌 값의 수)와 합계를 계산하고 싶습니다. 그런 다음 이것을 매달 반복하겠습니다. 약간의 속임수를 쓰기 위해 전체 날짜를 "연도"와 "월-연도"로 줄이는 열을 추가하여 작업을 더 쉽게 만들었습니다.

나는 awk를 사용하고 있으며 올바르게 합계할 수 있습니다. 문제는 계산입니다. 현재 내 awk 라인은 연간(또는 월)당 일 수를 계산하고아니요관측치 수. 따라서 전체 데이터 세트에 대해 "365" 또는 "366"을 얻습니다. 이는 날짜 열에 나열된 총 항목 수입니다. 내가 얻고자 하는 것은 "에 해당하는 측정값이 있는 날짜의 수입니다. pbl' 열입니다.

내 직감은 어딘가에 "0이 아닌 항목" 조항을 포함하거나 $2 대신 $4를 사용해야 한다는 것인데 어떻게 해야 할지 모르겠습니다. 어떤 조언이라도 감사하겠습니다!

내 코드:

awk -F, '{a[$2]++; count[$2]+=$NF}END{for (i in a) print i,a[i],count[i]}' data.csv

내 데이터(샘플):

"날짜", "연도", "월-연도", "pbl"

2004년 5월 12일,"12-2004",960.295

2004년 6월 12일,"12-2004",

2004년 13월 12일,"12-2004",911.774

2004년 12월 4일,"12-2004",2804.06

2004년 12월 4일,"12-2004",4453.56

2005년 1월 1일, "01-2005",1326.38

2005년 7월 1일/05,"01-2005",

2005년 8월 1일/05,"01-2005",604.919

2005년 9월 1일/05,"01-2005",755.006

2005년 10월 1일, "01-2005",

2005년 11월 1일,"01-2005",978.818

2005년 12월 1일, "01-2005",

2005년 13월 1일, "01-2005",1644.87

2005년 4월 5일 29일,"04-2005",3630.62

2005년 4월 5일 30일,"04-2005",3780.11

2005년 1월 5일, "05-2005",1262.66

2005년 2월 5일/05,"05-2005",

2006년 2월 6일 14일,"02-2006",5667.58

2006년 2월 6일 15일,"02-2006",2696.56

2007년 7월 23일,"07-2007",1276.06

2007년 7월 24일,"07-2007",

답변1

값이 다음과 같은 행만 처리하면 됩니다 $4.

awk -F, '$4 {a[$2]++; count[$2]+=$NF}END{for (i in a) print i,a[i],count[i]}' data.csv

이것은 작동합니다.

$4 {a[$2]++; count[$2]+=$NF}

블록이 true로 평가되는 행에서만 실행되도록 합니다 $4.$4비어 있지 않고 0도 아닙니다 .

관련 정보