동일한 행의 총 행 수와 고유 수를 얻는 방법

동일한 행의 총 행 수와 고유 수를 얻는 방법

다음 줄이 포함된 파일(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

관련 정보