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