确定唯一值的数量,然后确定这些值在文件中出现的次数

确定唯一值的数量,然后确定这些值在文件中出现的次数

我有一个包含 15000 行的数据文件,但只有 400 个唯一值。我正在寻找一种方法来识别唯一值的数量,然后识别这些值在文件中出现的次数。我想出了以下方法,但速度非常非常慢。有什么想法吗?

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

答案1

只需使用排序和 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

相关内容