如何合并两个频率计数字典 - unix cmd?

如何合并两个频率计数字典 - unix cmd?

我有两个频率计数字典,我尝试使用 join/sort cmd 合并它们,但总是得到错误的输出或不同的频率计数。我想将它们连接在一起,如果该单词存在则添加+1,并且新单词计数为1

  7 umslipped
  1 umslippersmouthwashand
  3 umslobagas
 35 umslopogaas
  5 (umslopogaas
 15 (umslopogaas)
  1 umslower
  6 umsmall
  2 umsnag
  2 um[snaps
 13 umsnootchie
  2 umsnow
 84 umso
 14 um-so ##

第二本词典

1   palpating
1   palpated
1   palpate
1   palpably
1   palpable
1   palominos
1   palomino
1   palomar
1   palmyra
1   palmy
1   palmtops
1   palmtop
1   palms
1   palmolive
1   palmists
1   palmistry
1   palmist

答案1

您可以使用awk将其全部加起来。

awk '{ arr[$2] += $1} END {for (key in arr) {printf "%4s %s\n", arr[key], key}}' file1 file2

解释

  • { arr[$2] += $1}将字符串的数组索引设置$2+=数字$1
  • END当我们完成后
  • {for (key in arr) {printf "%4s %s\n", arr[key], key}}循环遍历所有内容并将其打印出来。

我做了什么来测试它

文件1

  7 umslipped
  1 umslippersmouthwashand
  3 umslobagas
 35 umslopogaas
  5 (umslopogaas
 15 (umslopogaas)
  1 umslower
  6 umsmall
  2 umsnag
  2 um[snaps
 13 umsnootchie
  2 umsnow
 84 umso
 14 um-so ##

文件2

 14 um-so ##
 84 umso
  2 umsnow
 13 umsnootchie
  2 um[snaps
  2 umsnag
  6 umsmall
  1 umslower
 15 (umslopogaas)
  5 (umslopogaas
 35 umslopogaas
  3 umslobagas
  1 umslippersmouthwashand
  7 umslipped

输出

  10 (umslopogaas
  12 umsmall
   6 umslobagas
  28 um-so
   2 umslippersmouthwashand
  30 (umslopogaas)
  70 umslopogaas
  26 umsnootchie
   4 umsnag
 168 umso
   4 um[snaps
  14 umslipped
   4 umsnow
   2 umslower

相关内容