私が持っているファイルは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
答え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