我有一个包含 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