【问题标题】:command to count occurrences of word in entire file计算整个文件中单词出现次数的命令
【发布时间】:2014-02-06 12:53:01
【问题描述】:

我正在尝试计算文件中某个单词的出现次数。

如果一个单词在一行中出现多次,我将计数为 1。

以下命令将为我提供输出,但如果 line 有多个单词出现,则会失败

grep -c "word" filename.txt

有没有一个班轮?

【问题讨论】:

标签: bash shell grep


【解决方案1】:

您可以使用grep -o 显示完全匹配然后计算它们:

grep -o "word" filename.txt | wc -l

测试

$ cat a
hello hello how are you
hello i am fine
but
this is another hello

$ grep -c "hello" a    # Normal `grep -c` fails
3

$ grep -o "hello" a 
hello
hello
hello
hello
$ grep -o "hello" a | wc -l   # grep -o solves it!
4

【讨论】:

    【解决方案2】:

    将 awk 中的 RS 设置为较短的。

    awk 'END{print NR-1}' RS="word" file
    

    【讨论】:

      【解决方案3】:

      GNU awk 允许使用多个管道命令在单个命令中完成:

      awk -v w="word" '$1==w{n++} END{print n}' RS=' |\n' file
      

      【讨论】:

        【解决方案4】:
        cat file | cut -d ' ' | grep -c word
        

        这假定文件中的所有单词在单词之间都有空格。如果有标点符号将单词连接到自身,或者单词和自身之间的单行没有空格,则它们将计为一个。

        【讨论】:

        • tr " " "\n"< file |grep -c "word"怎么样
        • 我认为grep -o '[^ \t\n,.]\+'会让你指定单词分隔符,然后使用wc -l
        • 对不起,错过了正则表达式中的 -P 选项。请参阅:stackoverflow.com/questions/1825552/grep-a-tab-in-unix 了解更多信息
        【解决方案5】:
        grep word filename.txt | wc -l
        

        grep 打印匹配的行,然后wc -l 打印匹配的行数

        【讨论】:

        • 它不计算同一行中单词的重复出现次数。这会计算有多少行中有这个词
        • @GuntramBlohm 不,它没有。鉴于我的示例文件,它将返回 3 而不是 4。
        • "我将数为 1。"对我来说,这意味着他希望同一行中的多个单词只计数一次。
        • 但是,请阅读“以下命令将为我提供输出,但如果 line 有多个单词出现,则会失败。”我想他可能是想说“如果一个词在一行中出现多次,它会算作 1”
        • 是的,他的意思是“到目前为止,如果在一行上多次出现,则将其视为一个”,因此他正在寻找更好的解决方案(一个计算单词出现次数的解决方案,而不是包含单词的行)(因此是问题。否则,他的“grep -c”已经是答案了)。
        猜你喜欢
        • 2023-04-04
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        相关资源
        最近更新 更多