使用awk从文件创建单词索引

时间:2018-02-08 19:46:30

标签: shell unix awk gsub

我正在学习UNIX for school,我应该创建一个命令行,该命令行接受一个文本文件并生成一个字典索引,显示单词(包括文章和介词)及其出现的行文件。

我发现了类似我的问题:https://unix.stackexchange.com/questions/169159/how-do-i-use-awk-to-create-an-index-of-words-in-file?newreg=a75eebee28fb4a3eadeef5a53c74b9a8问题在于我运行解决方案

$ awk '
{
  gsub(/[^[:alpha:] ]/,"");
  for(i=1;i<=NF;i++) {
      a[$i] = a[$i] ? a[$i]", "FNR : FNR;
  }
}
END {
      for (i in a) {
          print i": "a[i];
      }
}' file | sort

输出包含特殊字符(我不想要),如:

-Quiero: 21
Sancho,: 2, 4, 8

如何删除所有特殊字符并排除文章和介词?

1 个答案:

答案 0 :(得分:2)

$ echo This is this test. |                    # some test text
awk '
BEGIN{
    x["a"];x["an"];x["the"];x["on"]            # the stop words
    OFS=", "                                   # list separator to a
}
{
    for(i=1;i<=NF;i++)                         # list words in a line
        if($i in x==0) {                       # if word is not a stop word
            $i=tolower($i)                     # lowercase it
            gsub(/^[^a-z]|[^a-z]$/,"",$i)      # remove leading and trailing non-alphabets
            a[$i]=a[$i] (a[$i]==""?"":OFS) NR  # add record number to list
        }
    }
END {                                          # after file is processed
    for(i in a)                                # in no particular order
        print i ": " a[i]                      # ... print elements in a
}'
this: 1, 1
test: 1
is: 1