1

我试图找出一种方法来获取每行一个单词的文件,并输出文件中最常用单词的日志以及它们出现的频率。

Namly,如果给我一个这样的文件(比我看到的要短得多,但为了清楚起见......):

dog
dog
cat
bird
cat
horse
dog

我会得到如下输出:

dog - 3
cat - 2
bird - 1
horse - 1
4

2 回答 2

4

这个怎么样:

[cnicutar@fresh ~]$  sort < file | uniq -c | sort -rn
   3 dog
   2 cat
   1 horse
   1 bird

然后你可以调整它以获得 dog-3 等等。

于 2012-11-18T07:15:47.997 回答
2

使用

$ awk '{arr[$1]++}END{for(a in arr){print a" - "arr[a]}}' file.txt | sort -nrk3

完整的版本:

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 -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
于 2012-11-18T07:16:57.677 回答