40

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

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

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

4

10 回答 10

47
grep char -o filename | wc -l
于 2009-09-02T15:59:50.983 回答
13

另一种选择:

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

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

于 2009-09-02T17:04:17.533 回答
1

还有awk:

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

更改-Fl-F<your character>

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

于 2009-09-02T16:21:30.927 回答
1

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

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

于 2013-07-10T13:38:05.303 回答
1
awk '{ printf "%s\n", gsub( "ur_char", "oth_char", $0 ) }' < your_file_name > output.txt

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

于 2012-08-29T15:50:30.080 回答
1

替代 grep:

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

x您要计算的字符在哪里。

于 2009-09-02T16:12:17.713 回答
1

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

expr `wc -c < filename` \- `tr -d \| < filename | wc -c`
于 2015-02-26T16:29:34.033 回答
1

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

于 2017-08-21T13:58:27.513 回答
0

这是另一种方式

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

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

于 2012-07-12T06:33:49.247 回答
0

试试看

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

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

于 2009-09-02T16:02:52.553 回答