![awk + 파일의 문자열 계산 [중복]](https://linux55.com/image/146577/awk%20%2B%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EA%B3%84%EC%82%B0%20%5B%EC%A4%91%EB%B3%B5%5D.png)
/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;}'
sort
uniq
항목을 처리할 수 있도록 입력을 정렬합니다 . 분류해야합니다. 최종 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