UNIX 서버의 파일에서 중복 항목 식별

UNIX 서버의 파일에서 중복 항목 식별

내 파일은 세미콜론으로 구분된 다중 열 파일입니다. 첫 번째 열의 중복 레코드만 제거하고 싶습니다. 또한 첫 번째 열에서 이러한 중복 항목의 수를 계산하고 싶습니다. 어떤 제안이 있으십니까?

답변1

다음과 같이 작동해야 합니다.

awk -F";" '!seen[$1]++{print}END {for (i in seen) if (seen[i]>1) print i,"found :" seen[i] "times"}' file

END 이전의 첫 번째 부분은 시뮬레이션된 사본을 인쇄하지 않습니다 uniq. 즉, 항목이 두 번 이상 발견되면 첫 번째 항목만 인쇄됩니다.

END의 코드는 여러 번 발견된 모든 항목을 인쇄합니다.

순전히 고유한 항목을 인쇄해야 하는 경우(시뮬레이션은 uniq -u항목이 두 번 이상 발견되면 전혀 인쇄되지 않음을 의미함) 다음을 사용할 수 있습니다.

awk -F";" '{seen[$1]++}END {for (k=1;k<=2;k++) for (i in seen) if (seen[i]==1) {print i;delete seen[i];continue} else {print i,"found :" seen[i] "times"}}' file

그러면 배열이 두 번 반복됩니다. 처음에는 실제 uniq 항목을 인쇄하고 두 번째에는 중복 항목을 인쇄합니다.

선택하다:

awk -F";" '{seen[$1]++}END {for (i in seen) print "found :" seen[i] "times:",i}' file |sort

그러면 각 항목이 개수와 함께 인쇄됩니다(고유한 항목은 한 번 발견되고, 고유하지 않은 항목은 여러 번 발견됩니다).

관련 정보