정렬을 사용하는 큰 파일의 경우 속도가 느려집니다. 동등한 문제를 해결하기 위해 짧은 C 프로그램을 작성했습니다 ( 테스트가있는 Makefile의 요점 참조 ).
#include <stdio.h>
#define BUFFERLEN 4096
int main(){
// This program reads standard input and calculate frequencies of different
// bytes and present the frequences for each byte value upon exit.
//
// Example:
//
// $ echo "Hello world" | ./a.out
//
// Copyright (c) 2015 Björn Dahlgren
// Open source: MIT License
long long tot = 0; // long long guaranteed to be 64 bits i.e. 16 exabyte
long long n[256]; // One byte == 8 bits => 256 unique bytes
const int bufferlen = BUFFERLEN;
char buffer[BUFFERLEN];
int i;
size_t nread;
for (i=0; i<256; ++i)
n[i] = 0;
do {
nread = fread(buffer, 1, bufferlen, stdin);
for (i = 0; i < nread; ++i)
++n[(unsigned char)buffer[i]];
tot += nread;
} while (nread == bufferlen);
// here you may want to inspect ferror of feof
for (i=0; i<256; ++i){
printf("%d ", i);
printf("%f\n", n[i]/(float)tot);
}
return 0;
}
용법:
gcc main.c
cat my.file | ./a.out
| sort -n
하고| sort -n -r
내림차순으로 정렬해야했습니다 (정렬은 질문의 일부가 아닙니다). 정렬이 더 나을 수도 있습니다 ...