awk + 파일의 문자열 계산 [중복]

awk + 파일의 문자열 계산 [중복]

/tmp/users 파일에 사용자 목록(각 목록에는 서로 다른 사용자가 포함됨)이 있습니다.

more /tmp/users


root
kafka
yarn
hdfs
root
root
yarn
moon
apache
start
moon
apache

파일에 있는 사용자를 인쇄하고 싶습니다./tmp/사용자다음과 같이 계산합니다.

기대되는 성과

apache - 2
Hdfs - 1
Kafka - 1
Moon - 2
Root - 3
Start - 1
Yarn - 2

답변1

이 파이프라인을 통해 이 결과를 얻을 수 있지만 가장 동질적인 접근 방식은 아닐 수도 있습니다.

sort /tmp/users | uniq -c | awk '{print $2 " - " $1;}'

sortuniq항목을 처리할 수 있도록 입력을 정렬합니다 . 분류해야합니다. 최종 awk보고서가 제작되고 성형수술이 됩니다. (그것 없이 출력을 비교하십시오.)

또한 입력에 빈 줄이 포함되어 있으면 건너뛸 수도 있습니다. perl편리하게 이용하세요:

perl -lne 'print unless /^\s*$/' in | sort | uniq -c | awk '{print $2 " - " $1;}'

이것은 또한 동질적인 Perl 하나의 라이너입니다:

perl -lne '($s)=/(\S+)/; $a{$s}++ if $s; END {print "$_ - $a{$_}" for (sort keys %a)}' /tmp/users

관련 정보