내 파일은 세미콜론으로 구분된 다중 열 파일입니다. 첫 번째 열의 중복 레코드만 제거하고 싶습니다. 또한 첫 번째 열에서 이러한 중복 항목의 수를 계산하고 싶습니다. 어떤 제안이 있으십니까?
답변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
그러면 각 항목이 개수와 함께 인쇄됩니다(고유한 항목은 한 번 발견되고, 고유하지 않은 항목은 여러 번 발견됩니다).