【问题标题】:How can I use the UNIX shell to count the number of times a letter appears in a text file?如何使用 UNIX shell 计算一个字母在文本文件中出现的次数?
【发布时间】:2010-11-25 00:14:39
【问题描述】:

我有几个文本文件,我想计算一个字母在每个文件中出现的次数?

具体来说,我想使用 UNIX shell 来执行此操作,格式为:cat file | ....做事...

有没有办法让 wc 命令执行此操作?

【问题讨论】:

  • 猫文件 |是一个不去,不做,甚至不去想它。大多数情况下,它与不需要 cat 的 less 或 grep 一起使用。如果您不想简单地输出文件,请不要使用 cat。
  • cat 实际上对于将 RAM 使用量保持在最低限度很有用。它在处理大文件时很有用,因为它将逐行通过管道输入。

标签: unix word-count


【解决方案1】:

您可以轻松尝试: grep -c 'YOUR LETTER' YOUR FILE

【讨论】:

  • 数字会出现在shell的换行符中
  • 将导致包含字符的行数,而不是字符实例数
【解决方案2】:

在这种情况下,我正在计算字符“|”:

expr `wc -c < filename` \- `tr -d \| < filename | wc -c`

【讨论】:

    【解决方案3】:

    回显 "a/b/c/d/e/f/g" | awk -F"/" '{打印 NF}'

    这将给出字符“/”的出现次数

    【讨论】:

      【解决方案4】:
      awk '{ printf "%s\n", gsub( "ur_char", "oth_char", $0 ) }' < your_file_name > output.txt
      

      您也可以添加当前行号的计数以获取 awk 中的行号。

      【讨论】:

        【解决方案5】:

        这是另一种方式

        cat  input_file | \
        awk 'BEGIN {FS="x"; var=0 } \
        {if (NF>0){ var=var + (NF-1) } } \
        END{print var}'
        

        其中 X 是要计算的字符或字符串,infile 是输入文件

        【讨论】:

          【解决方案6】:

          另一种选择:

          tr -d -C X <infile | wc -c
          

          其中 X 是要计算的字符或字符串,infile 是输入文件。

          【讨论】:

          • 这比公认的答案更干净(这取决于grep -o 的输出是换行符分隔的)。这也适用于任何字符(包括\n
          • 解释:“删除 (-d) 除 X 类型字符 (-C) 以外的所有字符,然后计算剩余字符数 (wc -c)。”
          【解决方案7】:

          尝试一下

          grep  [PATTERN] -o [FILE] | wc -l
          

          如果不需要,请不要使用 cat。

          【讨论】:

          • 每行不计算多个字符
          • @samoz:cat 是错误的,因为它应该将读取的文件输入到另一个程序 - 另一个程序能够自己读取文件,因此不需要使用 cat 并使代码行复杂化。 @SilentGhost:你的权利。
          【解决方案8】:

          还有awk:

          $ echo -e "hello world\nbye all" | awk -Fl '{c += NF - 1} END {print c}'
          5
          

          -Fl 更改为-F&lt;your character&gt;

          这通过将字段分隔符设置为-F 指定的字符,然后累加每一行上的字段数 - 1(因为如果有一个分隔符,则有两个字段 - 但我们应该只计算 1)。

          【讨论】:

            【解决方案9】:

            grep 的替代方案:

            sed 's/[^x]//g' filename | tr -d '\012' | wc -c
            

            x 是您要计算的字符。

            【讨论】:

              【解决方案10】:
              grep char -o filename | wc -l
              

              【讨论】:

              • 请注意,对于那些最初像我一样困惑的人,请将“char”替换为您要查找的字符或字符串。
              • 此外,大多数 grep 实现都有一个“-c”选项来计数。
              • 以上也适用于字符串,所以grep &lt;string&gt; -o &lt;file&gt; | wc -l是通用版本。例如:grep , -o myfile.txt | wc -l 计算 myfile.txt 中逗号的个数,grep abcd -o myfile.txt | wc -l 计算 myfile.txt 中abcds 的个数
              • 如果要计算 (.)s 句点/句号的数量,我该如何修改?我想获得文档中的大致句子数。谢谢!
              • @Michaël grep -c 不计算同一行上的多次出现,不幸的是
              猜你喜欢
              • 2012-04-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多