한 줄에 하나의 단어가있는 파일을 가져 와서 가장 자주 사용되는 단어의 로그와 그 빈도를 출력하는 방법을 알아 내려고합니다.UNIX - 문서의 대부분 요소 찾기
Namly,이 (내가보기에 무엇을 찾고보다 짧은,하지만 명확성을 위하여 ...) 같은 파일을 주어진 경우 :
: 나는 같은 출력을 얻을 것이다dog
dog
cat
bird
cat
horse
dog
을
한 줄에 하나의 단어가있는 파일을 가져 와서 가장 자주 사용되는 단어의 로그와 그 빈도를 출력하는 방법을 알아 내려고합니다.UNIX - 문서의 대부분 요소 찾기
Namly,이 (내가보기에 무엇을 찾고보다 짧은,하지만 명확성을 위하여 ...) 같은 파일을 주어진 경우 :
: 나는 같은 출력을 얻을 것이다dog
dog
cat
bird
cat
horse
dog
을
dog - 3
cat - 2
bird - 1
horse - 1
이 방법에 대해 :
[[email protected] ~]$ sort < file | uniq -c | sort -rn
3 dog
2 cat
1 horse
1 bird
그런 다음 등등 개-3 및 얻을 수를 조정할 수 있습니다. 사용
"bird"는 OP와 동일한 위치에서 정렬되지 않습니다. –
맨 위 5 단어 만 터미널에 인쇄 할 수 있도록 이러한 명령을 수정할 수 있습니까? –
@ShawnTaylor'head'에 또 다른 파이프를 가질 수 있습니다. 'head -n5'를 해보십시오. – squiguy
$ awk '{arr[$1]++}END{for(a in arr){print a" - "arr[a]}}' file.txt | sort -nrk3
전체 awk 버전 :
awk '{
arr[$1]++
}
END{
for (i in arr) tmpidx[sprintf("%12s", arr[i]),i] = i
num = asorti(tmpidx)
j = 0
for (i=num; i>=1; i--) {
split(tmpidx[i], tmp, SUBSEP)
indices[++j] = tmp[2]
}
for (i=1; i<=num; i++) print indices[i], arr[indices[i]]
}' file.txt
출력
dog - 3
cat - 2
horse - 1
bird - 1
을 사용하는 또 다른 방법(당신이 질문처럼 정확한 출력) :
perl -lne '
END{
print "$_ - $h{$_}" for reverse sort {$h{$a} cmp $h{$b}} keys %h
}
$h{$_}++
' file.txt
OUTPUT
dog - 3
cat - 2
bird - 1
horse - 1
스크립트 언어의 숫자는 당신과 가장 잘 알고있는이다, 쉽게 할 수있는 대부분의 유닉스 시스템에서 사용할 수 있습니까? 파이썬, 쉘 스크립팅, PHP, Perl? – noisewaterphd