고유한 값의 수를 확인한 다음 파일에서 이러한 값이 발생하는 횟수를 확인합니다.

고유한 값의 수를 확인한 다음 파일에서 이러한 값이 발생하는 횟수를 확인합니다.

15,000개의 행이 있는 데이터 파일이 있지만 고유 값은 400개뿐입니다. 고유한 값의 개수를 파악한 후 파일에서 해당 값이 발생하는 횟수를 파악하는 방법을 찾고 있습니다. 다음 방법을 생각해 냈지만 매우 느립니다. 어떤 아이디어가 있나요?

for value in `cat mylist.txt | uniq`
do
    counter=`grep $value mylist.txt |wc -l`
    echo $value $counter
done

답변1

그냥 sort와 uniq를 사용하세요:

sort mylist.txt | uniq | wc -l

그러면 고유한 값의 수가 제공됩니다. 각 고유 값의 발생 횟수를 얻으려면 uniq-c 옵션을 사용하십시오.

sort mylist.txt | uniq -c

uniq매뉴얼 페이지 에서 :

   -c, --count
               prefix lines by the number of occurrences

또한 나중에 참조할 수 있도록 grep-c 옵션이 유용한 경우가 많습니다.

 -c, --count
              Suppress  normal  output;  instead  print  a  count  of
              matching  lines  for  each  input  file.   With the -v,
              --invert-match option (see below),  count  non-matching
              lines.  (-c is specified by POSIX.)

답변2

이 시도.

for w in `cat $file`; 
do 
    echo $w; 
done|sort|uniq -c

관련 정보