一意の値の数を確認し、ファイル内でこれらの値が発生した回数を確認します。

一意の値の数を確認し、ファイル内でこれらの値が発生した回数を確認します。

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.)

おすすめ記事