尝试使用脚本查找文件中单词的频率

尝试使用脚本查找文件中单词的频率

我所拥有的文件被调用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

参考: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"}'

测试@1 测试@1 多个@1 a@1 这个@1 这里@1 是@1 测试@3 是@1

相关内容