다음 줄이 포함된 파일(test.csv)이 있습니다.
2016-08-23 00:00:00,270113184103681474
2016-08-23 00:00:00,270113184101689340
2016-08-23 00:00:00,270113184103681474
2016-08-23 00:00:00,270113184101689340
2016-08-23 01:00:00,270113184103681474
2016-08-23 01:00:00,270113184101689340
첫 번째 열의 각 열에 대한 총 행 수와 두 번째 열의 고유 항목 수를 얻고 싶습니다. 위 줄에 대해 원하는 출력은 다음과 같습니다.
2016-08-23 00:00:00, 4, 2
2016-08-23 01:00:00, 2, 2
간단한 grep/awk 솔루션이 있습니까?
답변1
순진한 해결책은 단지 각 발생 횟수를 세고 이전에 본 적이 있는지 추적하는 것입니다.
그래서:
awk -F, '{ t[$1]++; seen[$0]++; if (seen[$0] == 1) { u[$1]++ } }
END { for (a in t) { print a "," t[a] "," u[a] } }'
첫 번째 줄은 해당 날짜가 에 나타나는 총 횟수를 추적합니다 t
. 각 행을 몇 번이나 본 것인지 추적 seen
하고 이번이 처음 본 것이라면 그것이 고유하다는 것을 알고 에 계산합니다 u
.
두 번째 줄은 결과를 반복하여 인쇄합니다.
답변2
GNU로 전환할 수 있다면awk
awk -F, '{a[$1]++; b[$1][$2]};
END{for (k in a) printf "%s,%d,%d\n", k, a[k], length(b[k])}' test.csv