我试图找出一种方法来获取每行一个单词的文件,并输出文件中最常用单词的日志以及它们出现的频率。
Namly,如果给我一个这样的文件(比我看到的要短得多,但为了清楚起见......):
dog
dog
cat
bird
cat
horse
dog
我会得到如下输出:
dog - 3
cat - 2
bird - 1
horse - 1
我试图找出一种方法来获取每行一个单词的文件,并输出文件中最常用单词的日志以及它们出现的频率。
Namly,如果给我一个这样的文件(比我看到的要短得多,但为了清楚起见......):
dog
dog
cat
bird
cat
horse
dog
我会得到如下输出:
dog - 3
cat - 2
bird - 1
horse - 1
这个怎么样:
[cnicutar@fresh ~]$ sort < file | uniq -c | sort -rn
3 dog
2 cat
1 horse
1 bird
然后你可以调整它以获得 dog-3 等等。
$ awk '{arr[$1]++}END{for(a in arr){print a" - "arr[a]}}' file.txt | sort -nrk3
完整的awk版本:
awk '{
arr[$1]++
}
END{
for (i in arr) tmpidx[sprintf("%12s", arr[i]),i] = i
num = asorti(tmpidx)
j = 0
for (i=num; i>=1; i--) {
split(tmpidx[i], tmp, SUBSEP)
indices[++j] = tmp[2]
}
for (i=1; i<=num; i++) print indices[i], arr[indices[i]]
}' file.txt
输出
dog - 3
cat - 2
horse - 1
bird - 1
使用perl的另一种方式(如您所问的确切输出):
perl -lne '
END{
print "$_ - $h{$_}" for reverse sort {$h{$a} cmp $h{$b}} keys %h
}
$h{$_}++
' file.txt
输出
dog - 3
cat - 2
bird - 1
horse - 1