awk如果通过比较两个文本文件列,如果相同则计数器加1

a.txt内容如下:456755665566456734654567b.txt内容如下:5564,a4567,b2345,c3465,d5566,e比较a.txt第一列和... a.txt内容如下:
4567
5566
5566
4567
3465
4567

b.txt内容如下:
5564,a
4567,b
2345,c
3465,d
5566,e

比较a.txt第一列和b.txt中第一列是否相同,如果相同则将b.txt中的第二列次数+1,生成结果
c.txt:
b=3
d=1
e=2

请问如何通过awk工具来实现这个过程?
展开
 我来答
我叫熊拍拍
2013-01-09 · TA获得超过210个赞
知道小有建树答主
回答量:101
采纳率:0%
帮助的人:97.2万
展开全部
awk -F '[, ]' 'NR==FNR{dict[$1]++}NR!=FNR{if($1 in dict){print $2"="dict[$1]}}' a.txt b.txt

文件里的每一行最后如果真有空格(估计是打错了。。)就是上面的,没有的话就是下面:

awk -F ',' 'NR==FNR{dict[$1]++}NR!=FNR{if($1 in dict){print $2"="dict[$1]}}' a.txt b.txt
小米飞猫
2013-01-09 · 专注于IT监控领域技术
小米飞猫
采纳数:1653 获赞数:4811

向TA提问 私信TA
展开全部
awk -F',' 'NR==FNR{a[$1]++;next}{c[$1]=($1 in a)?a[$1]:0;print $2"= "c[$1]}0' a.txt b.txt
追问
大哥你好厉害!!

不好意思啊,实际需求应该是这样,b.txt中第二列的类别可能是相同的,然后输出c.txt中的b=5为a.txt中1111和2222总共出现5次,a=0和c=1也类似这样计算,应该如何改进啊:

a.txt内容如下:
1111
2222
2222
1111
3333
1111
b.txt内容如下:
4444,a
1111,b
5555,a
3333,c
2222,b

生成结果
c.txt:
a=0
b=5c=1
追答
awk -F',' 'NR==FNR{a[$1]++;next}{c[$1]=($1 in a)?a[$1]:0;print $2"= "c[$1]}0' a.txt b.txt |awk -F'=' '{a[$1]+=$2}END {for( i in a ) print i"= " a[i]}'  | sort -n > c.txt

awk -F',' 'NR==FNR{a[$0]+=1;next}{for(i in a)if(i==$1){b[$2]+=a[i];delete a[i];break}else{b[$2]=0}}END{for(k in b )print k"="b[k]}' a.txt b.txt

两种方法,你看那个比较顺眼就用那个吧。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式