1

1行に1つの単語があるファイルを取り込んで、ファイル内で最も頻繁に使用される単語とそれらが発生した頻度のログを出力する方法を見つけようとしています。

ナムリー、私がこのようなファイルを与えられた場合(私が見ているものよりはるかに短いですが、明確にするために...):

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 に答える