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工具来实现这个过程? 展开
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工具来实现这个过程? 展开
2个回答
展开全部
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
两种方法,你看那个比较顺眼就用那个吧。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询