【发布时间】:2021-02-11 06:01:40
【问题描述】:
有没有办法使用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
【问题讨论】:
标签: python awk data-science
有没有办法使用awk或python来检查模式,我们组有120,000行消息但要知道谁回复最多;
考虑以下几行;
我希望显示结果
【问题讨论】:
标签: python awk data-science
$ 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
【讨论】:
这样的事情对你来说可能就足够了:
$ 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
【讨论】: