テキストファイルが与えられたら、ファイル内の単語とその頻度を出力したいと思います。たとえば、テキストファイルに「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'
-s
tr
'\n'
tr -s ' ' '\n'
私たちが伝える単語のリストですsort
。これにより、単語がアルファベット順にソートされます。
sort
ソートされた単語リストを渡すと、一意uniq
の単語リストが出力されます。uniq
リストを並べ替える必要があります。-c
フラグ出力は、各単語の前にも計算されます。カウンターは各行の先頭にいくつかのスペースを予約します。これにより、ソートされた単語が生成されます。これらのスペースは次のステップで削除されます。
uniq -c
これで、カウンターごとに単語を並べ替えることができます。各行(カウンタ)の最初の単語を使用して数字でソートされ-n
ます。結果を反転させるオプション(最も高いカウンターから)。sort
-r
sort -n -r
最後に、awk
を使用してprint
すべての行に対して単語とカウンタを交換します。不要なスペースは無料で整理されます(awk
スペースをフィールド区切り文字として使用し、複数のスペースを折りたたむ)。
各行に対して、次の操作を行いますprint
。
$2
2番目のフィールド(ワード)" "
- シングルスペース$1
- カウンター
awk '{ print $2 " " $1 }'