提问人:SG Kwon 提问时间:6/30/2023 最后编辑:Ed MortonSG Kwon 更新时间:6/30/2023 访问量:67
使用 AWK [closed] 打印字符串中出现频率最高的字母
Print the most frequently occuring letter in a string using AWK [closed]
问:
我有文本文件
('1', 6310445) [12, 20]_S:0.6:0:ACAAAAAAAAAAA_i_V
('1', 17704109) [12, 31]_S:0.387:0:CCCCCCCCCCCC_i_V
('1', 18922274) [8, 22]_S:0.364:0:AAAAAAAA_i_V
('1', 22750694) [8, 19]_S:0.421:0:TTTTTTTT_i_V
('1', 25564545) [9, 23]_S:0.391:0:AAAAAAAAA_i_V
('1', 29189562) [13, 34]_S:0.382:0:AAAAAAAAAAAAA_i_V
('1', 30166561) [14, 20]_S:0.7:0:TTTTTTTTTTTTTT_i_V
('1', 30450439) [9, 14]_S:0.643:0:AAAAAAAAA_i_V
('1', 30981321) [12, 23]_S:0.522:0:AAAAAAAAAAAA_i_V
我想在最后一个“:”和第一个“_”之间打印最常出现的字母。
这意味着
“ACAAAAAAAAAAA” => A, “CCCCCCCCCCCC”:=>C . . . .
输出将是
一个 C 一个 T 一个 一个 T 一个 一个
我该怎么办?
答:
2赞
jhnc
6/30/2023
#1
您可以使用简单的 reduce 样式方法:
awk -F: -v ORS= '
NF>1 && split($NF,a,/_/)>1 {
for (i=length(s=a[1]); i>0; i--)
if (++n[c=substr(s,i,1)] > n[r])
r=c
print r OFS
split(r="",n) # reset state
}
END { print "\n" }
' textfile
如果出现频率最高的是多个字符(例如),则将打印第一个达到最大值的字符。ABCABCABC
评论