我所拥有的文件被调用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 从集合导入* 导入重新、系统 文本=''.join(sys.argv[1:]) t=Counter(re.findall(r"[\w']+", text.lower())) 对于 t 中的项目: 打印项目+"@"+str(t[项目]) $ chmod 755 wdbag.py $ ./wdbag.py "这是一个测试测试测试测试有多个测试。" 一个@1 测试@1 多个@1 这个@1 是@1 那里@1 是@1 测试@4 $ ./wdbag.py 这是一个测试测试测试测试有多个测试。 一个@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"}'
测试@1 测试@1 多个@1 a@1 这个@1 这里@1 是@1 测试@3 是@1