如何使用 UNIX shell 计算一个字母在文本文件中出现的次数?

Posted

技术标签:

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

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

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

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

【问题讨论】:

猫文件 |是一个不去,不做,甚至不去想它。大多数情况下,它与不需要 cat 的 less 或 grep 一起使用。如果您不想简单地输出文件,请不要使用 cat。 cat 实际上对于将 RAM 使用量保持在最低限度很有用。它在处理大文件时很有用,因为它将逐行通过管道输入。 【参考方案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)   \
ENDprint 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 不计算同一行上的多次出现,不幸的是

以上是关于如何使用 UNIX shell 计算一个字母在文本文件中出现的次数?的主要内容,如果未能解决你的问题,请参考以下文章

unix环境下shell脚本如何往文本文件的头部加入utf8 bom头EEBBBF?如何删除bom

linux shell 如何把txt文本中每一行提取出来赋值给一变量,再输出这一变量

如何在 BPXBATCH 中编写长 z/OS UNIX shell 命令

按最后第二个字母排序的Unix命令

shell脚本简明的教程

如何使用SSH在远程计算机上运行shell脚本?