+ -
当前位置:首页 → 问答吧 → awk统计两个文件中某列重复的个数

awk统计两个文件中某列重复的个数

时间:2011-05-19

来源:互联网

本帖最后由 conall 于 2011-05-19 10:31 编辑

cat a
RXOTG-42;WM5320;59
RXOTG-40;WM5320;59
RXOTG-41;WM5320;56
RXOTG-43;WM5325;60
RXOTG-44;WM5330;61
RXOTG-44;WM5330;62
RXOTG-45;WH3029;

cat b
59;WM5320
56;WM5320
60;WM5325
61;WM5330
62;WM5330

求:a文件中$2在b文件重复的个数,并将个数附在a文件的第4列
RXOTG-42;WM5320;59;2
RXOTG-40;WM5320;59;2
RXOTG-41;WM5320;56;2
RXOTG-43;WM5325;60;1
RXOTG-44;WM5330;61;2
RXOTG-44;WM5330;62;2
RXOTG-45;WH3029;;0

作者: conall   发布时间: 2011-05-19

RXOTG-44;WM5330;61;1
RXOTG-44;WM5330;62;2

$2 是什么?

作者: liion631818   发布时间: 2011-05-19

回复 liion631818


    就是第2列啊

作者: conall   发布时间: 2011-05-19

本帖最后由 liion631818 于 2011-05-19 10:08 编辑

第二列,以分号为分隔符对吧,那为什么
RXOTG-44;WM5330;61;1
RXOTG-44;WM5330;62;2
最后的数字一个是1,一个是2
你之前有个帖子是以2,3列组合来判断吧

作者: liion631818   发布时间: 2011-05-19



QUOTE:
RXOTG-44;WM5330;61;1
RXOTG-44;WM5330;62;2
conall 发表于 2011-05-19 09:46




    WM5330在b中的个数为什么既是1个,也是2个?

作者: where27   发布时间: 2011-05-19

回复 where27


    不好意思,应该都是2

作者: conall   发布时间: 2011-05-19

  1. cat b <(echo ---) a | awk -F';' -vOFS=';' '!s{a[$2]++;}s{$4=0+a[$2];print}$0~"---"{s=1}'
复制代码

作者: MaskRay   发布时间: 2011-05-19

回复 conall
  1. awk -F';' 'NR==FNR{a[$2]++;next}{c[$2]=($2 in a)?a[$2]:0;print $0";"c[$2]}' b a
复制代码

作者: where27   发布时间: 2011-05-19

MaskRay 前辈的代码不行,where27 前辈的可行,awk  'BEGIN{OFS=FS=";"}NR==FNR{count[$2]++;next}$(NF+1)=count[$2]' b.txt a.txt亦可——————谢谢各位前辈!

作者: conall   发布时间: 2011-05-19

楼主的文本有问题啊,RXOTG-42;WM5320;59,这个出现了2次,其他就出现过一次,怎么来的两次呢?到底是以什么为比较?楼主再表达准确一点,要么我去补下语文。

作者: zooyo   发布时间: 2011-05-19