为了账号安全,请及时绑定邮箱和手机立即绑定

使用 awk 进行模式检查

使用 awk 进行模式检查

森栏 2024-01-24 15:47:50
有没有办法使用 awk 或 python 来检查模式,在我们组中,我们有 120,000 行消息,但如何知道谁在谁之后回复最多;考虑以下几行;AABBAA抄送AABBAAAAAABB抄送AA我希望结果显示AA->BB = 3BB->AA = 2AA->CC = 1CC->AA = 2AA->CC = 1BB->CC = 1CC->BB = 0
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

像这样的东西可能对你来说就足够了:


$ awk 'NR > 1 && prev != $1 { sum[prev"->"$1]++ }

       { prev = $1 }

       END { for (a in sum) { print a" = "sum[a] } }

  ' input.txt

AA->CC = 1

BB->AA = 2

AA->BB = 3

BB->CC = 1

CC->AA = 2

排序是随机的,

它不会打印AA->CC = 1两次;)

并且它不会打印空关系CC->BB = 0


查看完整回答
反对 回复 2024-01-24
?
POPMUISE

TA贡献1765条经验 获得超5个赞

$ awk -v OFS="=" '                           # set for one single use

{

    if(FNR>1 && p!=$0)                       # exclude unwanted

        a[p "->" $0]++                       # count

    p=$0                                     # save $0 for next round

}

END {                                        # in the end

    PROCINFO["sorted_in"]="@val_num_desc"    # ordering in GNU awk

    for(i in a)                              # We loop

        print i,a[i]                         # and count

}' file

输出:


AA->BB=3

BB->AA=2

CC->AA=2

AA->CC=1

BB->CC=1

如果您希望对输出进行排序,而不是与 awk 默认值相关的实现,并且您使用的是 GNU awk,请使用PROCINFO["sorted_in"]="@val_num_desc". 如果没有,请删除该行并将输出通过管道传输到sort -t= -k2n


查看完整回答
反对 回复 2024-01-24
  • 2 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信