![특정 행 수의 그룹으로 구성된 CSV 파일을 구문 분석하는 방법은 무엇입니까?](https://linux55.com/image/68872/%ED%8A%B9%EC%A0%95%20%ED%96%89%20%EC%88%98%EC%9D%98%20%EA%B7%B8%EB%A3%B9%EC%9C%BC%EB%A1%9C%20%EA%B5%AC%EC%84%B1%EB%90%9C%20CSV%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음 형식의 CSV 파일이 있습니다.
Date,Towns,Count1,Count2
6/26/2015,HYDERABAD,234552,0
,KARIM NAGAR,7520,0
,RAJAMUNDRY,7248,256
,KURNOOL,5848,32,0
,TIRUPATI,8560,64,0
,VIJAYAWADA,16776,96,0,0,16872
,VIZAG,30264,624,8,0.0128205128205128,30888
,WARANGAL,14112,880,0,0,14992
,GUNTUR,10304,224,0,0,10528
6/27/2015,HYDERABAD,0,6960,0,0,6960
,KARIM NAGAR,0,0,0,ERROR,0
,RAJAMUNDRY,0,256,0,0,256
,KURNOOL,0,32,0,0,32
,TIRUPATI,0,64,0,0,64
,VIJAYAWADA,0,96,0,0,96
,VIZAG,0,528,0,0,528
,WARANGAL,0,880,0,0,880
,GUNTUR,0,224,0,0,224
이 CSV에는 열과 행의 수가 있습니다. 행은 날짜별로 그룹화되어 있으며 각 마을에는 별도의 카운터가 있으며 CSV에는 첫 번째 열(날짜)로 구분된 각 마을에 대한 행 값이 있습니다.
코드가 매일의 시작과 끝을 인식하고(날짜 열 또는 도시 열을 기반으로 할 수 있음) 이를 기반으로 행을 그룹화할 수 있도록 쉘 스크립트를 사용하여 이 CSV 파일을 읽을 수 있는 방법이 있습니까? 예를 들어, 2015년 6월 26일 이후 Count2의 총 개수를 찾고 싶습니다(이것은 2015년 6월 26일 하이데라바드에서 Guntur까지 모든 도시의 합계가 됩니다).
답변1
CSV의 행에는 동일한 수의 필드가 없습니다. 그러나 다행스럽게도 이 문제를 무시하려면 다음을 수행할 수 있습니다.
awk -F, -v OFS=, '{ if($1 ~ /^[ \t]*$/) $1 = old; else old = $1 } 1' file.csv | \
datamash -H -t, -g 1 sum 4
datamash
위는GNU 데이터 혼합. awk
첫 번째 열과 datamash
그룹을 표준화하고 합산합니다.
산출:
GroupBy(Date),sum(Count2)
6/26/2015,2176
6/27/2015,9040
고유한 솔루션을 찾는 것은 awk
독자에게 (간단한) 연습 문제로 남겨집니다. :)