如何使用 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<your character>
。
这通过将字段分隔符设置为-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 <string> -o <file> | wc -l
是通用版本。例如:grep , -o myfile.txt | wc -l
计算 myfile.txt 中逗号的个数,grep abcd -o myfile.txt | wc -l
计算 myfile.txt 中abcd
s 的个数
如果要计算 (.)s 句点/句号的数量,我该如何修改?我想获得文档中的大致句子数。谢谢!
@Michaël grep -c
不计算同一行上的多次出现,不幸的是以上是关于如何使用 UNIX shell 计算一个字母在文本文件中出现的次数?的主要内容,如果未能解决你的问题,请参考以下文章
unix环境下shell脚本如何往文本文件的头部加入utf8 bom头EEBBBF?如何删除bom
linux shell 如何把txt文本中每一行提取出来赋值给一变量,再输出这一变量