我有一个文本文件,我想计算文件中每个字符的出现次数
以下是我的文件的示例
#1=DBD?BFHH=FIIIHIIGIHGHHIIIIIIIIGG?CHIIIAGGGHIGHEEHB@BDBCEDDDDD@CCA>?A>@C>:<?CCDDDDD@CD@DCBD9?CCDCB@
#1=DDFFFHFDHHIIIIJJIGHJIJGIIIIEGHGHJJBFGFHEIEEG@FFHJ.=EHHHABDDDBCCECEEEEDCBDEDDDDDDDDCDD?B9B:A:@?CCCD
所以输出结果为:
E - 10, C - 20, (#) - 10, 3 - 9
etc etc...
我希望我能够清楚地知道自己想要什么。
谢谢!
答案 0 :(得分:1)
$ awk '{for (i=1; i<=NF; i++){a[$i]++}}END{for (i in a){print i, a[i]}}' FS= file
A 5
B 13
C 20
D 36
E 14
9 2
F 10
: 3
G 14
. 1
H 21
< 1
I 29
J 7
= 4
# 2
> 3
1 2
? 7
@ 8
答案 1 :(得分:0)
如果你需要计算所有行的字母:
sed 's/\(.\)/\1\n/g' infile|sort |uniq -c |sort -n
1 .
1 <
2
2 #
2 1
2 9
3 :
3 >
如果你需要计算每一行的字母:
awk -v FS="" '{delete a;for (i=1;i<=NF;i++) a[$i]++;for (i in a) printf "%s - %s, ",i,a[i];printf RS}' infile
A - 3, B - 7, C - 12, D - 17, E - 3, 9 - 1, F - 2, : - 1, G - 8, H - 10, < - 1, I - 18, = - 2, # - 1, > - 3, 1 - 1, ? - 5, @ - 6,
A - 2, B - 6, C - 8, D - 19, E - 11, 9 - 1, F - 8, : - 2, G - 6, . - 1, H - 11, I - 11, J - 7, = - 2, # - 1, 1 - 1, ? - 2, @ - 2,
答案 2 :(得分:0)
Perl非常适合这种事情。将文件作为单个字符串读取,删除换行符,计算字母数,输出按字母排序的结果。
perl -0777 -nE 's/\n//g; $c{$_}++ for split //; say "$_ $c{$_}" for sort keys %c' file
# 2
. 1
1 2
9 2
: 3
< 1
= 4
> 3
? 7
@ 8
A 5
B 13
C 20
D 36
E 14
F 10
G 14
H 21
I 29
J 7
答案 3 :(得分:0)
GNU awk 4.1
awk -iwalkarray '{for (;NF;NF--) b[$NF]++} END {walk_array(b)}' FS=
[A] = 5
[B] = 13
[C] = 20
[D] = 36
[E] = 14
[F] = 10
[9] = 2
[G] = 14
[:] = 3
[.] = 1
[H] = 21
[I] = 29
[<] = 1
[J] = 7
[#] = 2
[=] = 4
[1] = 2
[>] = 3
[?] = 7
[@] = 8
如果你有早期版本的GNU awk,你可以使用for (c in b) print c, b[c]
。
我注意到walk_array
从未在Stack Overflow上使用过,所以我做到了
为了娱乐。我在/usr/share/awk
和/usr/lib/gawk