0

我有一段时间在这里完成我的家庭作业。也许你们会建议阅读什么或我可以使用哪些命令来创建以下内容:

创建一个 shell 脚本测试,其作用如下:

  1. 该脚本将在终端屏幕上显示以下消息:输入文件名(通配符确定)
  2. 该脚本将读取名称列表。
  3. 对于列表中属于正确文件的每个文件,显示一个表格,列出文件中最常用的 10 个单词,按照最常用的顺序排列。包括计数。
  4. 一遍又一遍地重复步骤 1-3,直到用户指示文件结束。这是通过输入单个字符 Ctrl-d 作为文件名来完成的。

这是我到目前为止所拥有的:

#!/bin/bash
echo 'Enter file names (wild cards OK)'
read input_source
if test -f "$input_source"
then 
4

3 回答 3

1

如何查找文件中最常用的十个单词

假设:

  1. 给出的文件每行一个单词。
  2. 文件并不大,因此效率不是主要问题。

您可以使用sortanduniq来查找文件中非唯一值的计数,然后tail切断除最后十个之外的所有值,并使用反向数字排序将它们按降序排列。

sort "$afile" | uniq -c | tail | sort -rd
于 2013-04-19T19:35:30.913 回答
1

一些技巧:

  1. 可以访问完整的 bash 手册:起初令人生畏,但它是非常宝贵的参考资料——http: //www.gnu.org/software/bash/manual/bashref.html

  2. 您可以在命令行获得有关 bash 内置函数的帮助:尝试help read

  3. read命令可以使用选项处理打印提示-p(请参阅上一个提示)

  4. 您将使用while循环完成最后一步:

    while read -p "the prompt" filenames; do 
        # ...
    done
    
于 2013-04-19T21:42:24.030 回答
1

我通常会忽略家庭作业问题,而没有表现出一些进步和努力学习的东西——但你很厚颜无耻,所以我会破例。

这就是你想要的

while read -ep 'Files?> ' files
do
    for file in $files
    do
        echo "== word counts for the $file =="
        tr -cs '[:alnum:]' '\n' < "$file" | sort | uniq -c | tail | sort -nr
    done
done

现在=至少尝试了解上述内容...

ps:投票结束...

于 2013-04-19T22:01:35.463 回答