スクリプトを使用してファイル内の単語の頻度を見つけます。

スクリプトを使用してファイル内の単語の頻度を見つけます。

私が持っているファイルはtestであり、次の行が含まれています。

This is a test Test test test There are multiple tests.

私は出力が次のようになります:

test@3 tests@1 multiple@1 is@1 are@1 a@1 This@1 There@1 Test@1

次のスクリプトがあります。

 cat $1 | tr ' ' '\n' > temp # put all words to a new line
    echo -n > file2.txt # clear file2.txt
    for line in $(cat temp)  # trace each line from temp file
    do
    # check if the current line is visited
     grep -q $line file2.txt 
     if [ $line==$temp] 
     then
    count= expr `$count + 1` #count the number of words
     echo $line"@"$count >> file2.txt # add word and frequency to file
     fi
    done

答え1

sort | uniq -c | sort -n頻度表を作成するために使用されます。希望の形式を取得するには、さらに調整が必要です。

 tr ' ' '\n' < "$1" \
 | sort \
 | uniq -c \
 | sort -rn \
 | awk '{print $2"@"$1}' \
 | tr '\n' ' '

答え2

grep+sort+uniq+sed管路:

grep -o '[[:alnum:]]*' file | sort | uniq -c | sed -E 's/[[:space:]]*([0-9]+) (.+)/\2@\1/'

出力:

a@1
are@1
is@1
multiple@1
test@3
Test@1
tests@1
There@1
This@1

答え3

$猫>wdbag.py
#!/usr/bin/python

コレクションからインポート*
輸入財システム

text=''.join(sys.argv[1:])       

t=カウンタ(re.findall(r"[\w']+", text.lower()))

t項目の場合:
  アイテムを印刷+"@"+str(t[アイテム])

$chmod 755 wdbag.py

$ ./wdbag.py "複数のテストを含むテストテストはテストテストです。"
a@1
テスト@1
マルチ@1
この@1
1だ
そこ@1
1だ
テスト@4

$ ./wdbag.py複数のテストを含むテストテストテストテスト。
a@1
テスト@1
マルチ@1
この@1
1だ
そこ@1
1だ
テスト@4

引用:https://stackoverflow.com/a/11300418/3720510

答え4

grepとawkを使用してください。

 grep -o '[[:alnum:]]*' file | awk '{ count[$0]++; next}END {ORS=" "; for (x in count)print x"@"count[x];print "\n"}'

test @ 1 test @ 1倍数@ 1 a @ 1この@ 1ここ@ 1は@ 1 test @ 3は@ 1

関連情報