명령줄 도구를 사용하여 정렬된 순서로 중복 항목 계산

명령줄 도구를 사용하여 정렬된 순서로 중복 항목 계산

일련의 숫자를 필터링하기 위해 로그 파일을 검색하는 명령(cmd1)이 있습니다. 숫자는 무작위 순서이므로 sort -gr역순으로 정렬된 숫자 목록을 얻는 데 사용합니다. 이 정렬된 목록에는 중복된 항목이 있을 수 있습니다. 해당 목록에 있는 각 고유 번호의 개수를 찾아야 합니다.

예를 들어, cmd1의 출력이 다음과 같은 경우

100 100 100 99 99 26 25 24 24

위의 출력을 파이프할 수 있는 또 다른 명령이 필요하므로 다음을 얻습니다.

100 3 99 2 26 1 25 1 24 2

답변1

출력을 약간 다른 형식으로 처리할 수 있다면 다음을 수행할 수 있습니다.

cmd1 | tr " " "\n" | uniq -c

당신은 돌아올 것입니다 :

  3 100
  2 99
  1 26
  1 25
  2 24

답변2

-u 스위치도 추가하십시오. 따라서 당신은 다음을 갖게 될 것입니다 :

cmd1 | sort -gru

정렬 맨페이지에서:

-u,
-c가 없는 --unique, 동일한 실행 중 첫 번째만 출력합니다.

답변3

(귀하의 입력이 한 줄에 하나의 숫자라고 가정합니다. 그것이 정렬 결과이기 때문입니다.)

awk를 시도해 볼 수 있습니다.

<your_command> | awk '{numbers[$1]++} END {for (number in numbers) print number " " numbers[number]}'

이렇게 하면 정렬되지 않은 목록이 제공되므로(내가 아는 한 배열이 awk에서 탐색되는 순서는 정의되지 않음) 원하는 대로 다시 정렬해야 합니다.

답변4

$ echo '100 100 100 99 99 26 25 24 24' | perl -e 'while (<>) { chomp; my %nums; foreach (split(/ /)) { $nums{$_} += 1; }; foreach (sort {$b <=> $a} keys %nums) { print "$_ $nums{$_} " }; print "\n"; }'
100 3 99 2 26 1 25 1 24 2

관련 정보