Bashを使用してテキストファイルから語彙リストを作成するには?

Bashを使用してテキストファイルから語彙リストを作成するには?

テキストファイルが与えられたら、ファイル内の単語とその頻度を出力したいと思います。たとえば、テキストファイルに「I really likeburgers」が含まれている場合、出力は次のようになります。

Burgers 1
I 1
Love 1
Really 2

ベストアンサー1

テストファイル:

$ cat filename.txt 
I really really   love burgers

cat filename.txt \
    | tr -s ' ' '\n' \
    | sort \
    | uniq -c \
    | sort -n -r \
    | awk '{ print $2 " " $1 }'

出力:

really 2
love 1
I 1
burgers 1

すべてを分解し、各ステップを説明します。まず、ファイルcatはで印刷されますstdout

cat fileanme.txt

その後、出力を渡すと、すべてのスペース()が改行()に置き換えcatられます。trこのオプションはスペースを圧縮し、複数のスペースを1つに置き換えます。単語間に複数の空白があっても、1行に1つの単語が生成されます。' ''\n'-str'\n'

tr -s ' ' '\n'

私たちが伝える単語のリストですsort。これにより、単語がアルファベット順にソートされます。

sort

ソートされた単語リストを渡すと、一意uniqの単語リストが出力されます。uniqリストを並べ替える必要があります。-cフラグ出力は、各単語の前にも計算されます。カウンターは各行の先頭にいくつかのスペースを予約します。これにより、ソートされた単語が生成されます。これらのスペースは次のステップで削除されます。

uniq -c

これで、カウンターごとに単語を並べ替えることができます。各行(カウンタ)の最初の単語を使用して数字でソートされ-nます。結果を反転させるオプション(最も高いカウンターから)。sort-r

sort -n -r

最後に、awkを使用してprintすべての行に対して単語とカウンタを交換します。不要なスペースは無料で整理されます(awkスペースをフィールド区切り文字として使用し、複数のスペースを折りたたむ)。

各行に対して、次の操作を行いますprint

  • $22番目のフィールド(ワード)
  • " "- シングルスペース
  • $1- カウンター
awk '{ print $2 " " $1 }'

おすすめ記事