使用 awk 进行模式检查

有没有办法使用 awk 或 python 来检查模式,在我们组中,我们有 120,000 行消息,但如何知道谁在谁之后回复最多;

考虑以下几行;

  • AA

  • BB

  • AA

  • 抄送

  • AA

  • BB

  • AA

  • AA

  • AA

  • BB

  • 抄送

  • AA

我希望结果显示

  • AA->BB = 3

  • BB->AA = 2

  • AA->CC = 1

  • CC->AA = 2

  • AA->CC = 1

  • BB->CC = 1

  • CC->BB = 0


森栏
浏览 72回答 2
2回答

三国纷争

像这样的东西可能对你来说就足够了:$ awk 'NR > 1 && prev != $1 { sum[prev"->"$1]++ }       { prev = $1 }       END { for (a in sum) { print a" = "sum[a] } }  ' input.txtAA->CC = 1BB->AA = 2AA->BB = 3BB->CC = 1CC->AA = 2排序是随机的,它不会打印AA->CC = 1两次;)并且它不会打印空关系CC->BB = 0

POPMUISE

$ 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=3BB->AA=2CC->AA=2AA->CC=1BB->CC=1如果您希望对输出进行排序,而不是与 awk 默认值相关的实现,并且您使用的是 GNU awk,请使用PROCINFO["sorted_in"]="@val_num_desc". 如果没有,请删除该行并将输出通过管道传输到sort -t= -k2n
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python