首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWK:比较两个文件并根据差异计算百分比

AWK:比较两个文件并根据差异计算百分比
EN

Stack Overflow用户
提问于 2015-12-03 08:58:36
回答 1查看 240关注 0票数 0

我有两个文件。我需要的是计数每个ID出现在每个文件上的次数,并计算差异以获得成功的百分比。此外,如果第一个文件的第三列包含单词NONE,而第二个文件的同一列包含一个数字,则指示已获得该ID的类别。

档案1:

代码语言:javascript
复制
ID;Coments;Category
2;es un anuncio interesante que le puede servir para alguien;321
3;es un anuncio de un banco que quiere presentarse como una compañía;NONE
4;es un anuncio de un banco que ofrece prestamos para empresas.;70
5;credito pyme bana para hacer crecer tu negocio;50
5;credito pyme bana para hacer crecer tu negocio;52
5;credito pyme bana para hacer crecer tu negocio;70
5;credito pyme bana para hacer crecer tu negocio;71
6;comercial que te hace pensar en considerar a bana para poner tu  negocio;50
6;comercial que te hace pensar en considerar a bana para poner tu negocio;71
7;este anuncio da una breve explicación sobre el tratamiento de hemodialisis;50
8;un anucio de bana donde muestra que se puede pedir un crédito para emprender;50
8;un anucio de bana donde muestra que se puede pedir un crédito para emprender;52
8;un anucio de bana donde muestra que se puede pedir un crédito para emprender;70
8;un anucio de bana donde muestra que se puede pedir un crédito para emprender;71
9;bonito;NONE

档案2:

代码语言:javascript
复制
ID;Coments;Category
2;es un anuncio interesante que le puede servir para alguien;321
3;es un anuncio de un banco que quiere presentarse como una compañía;57
4;es un anuncio de un banco que ofrece prestamos para empresas.;50
5;credito pyme bana para hacer crecer tu negocio;52
6;comercial que te hace pensar en considerar a bana para poner tu negocio;50
7;este anuncio da una breve explicación sobre el tratamiento de hemodialisis;210
8;un anucio de bana donde muestra que se puede pedir un crédito para emprender;50
9;bonito;303

期望产出:

代码语言:javascript
复制
For the ID-2, we have achieved a 100% success rate.
For the ID-3, we have achieved a category.
For the ID-4, we have achieved a 100% success rate.
For the ID-5, we achieved a 25% success rate.
For the ID-5, we achieved a 50% success rate.
For the ID-7, we have achieved a 100% success rate.
For the ID-8, we have achieved a 25% success rate.
For the ID-9, we have achieved a category.

一种方法可能是这么小。但当然,我需要计算百分比,并打印它,就像我想要的输出格式。

代码语言:javascript
复制
awk 'BEGIN { FS=OFS=";" } NR==FNR{cnt[$1]++; next} { cnt2[$1]++;}  END{ for (ID in cnt){ print ID, "CAT: "cnt[ID],"Manual: "cnt2[ID];}}'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-03 12:53:14

Awk是为了这个

代码语言:javascript
复制
awk -F ';' '
   FNR==1{next}
   FNR==NR{C1[$1]++;N1[$1]=($3!~/NONE/);next}
   {C2[$1]++;if($3!~/NONE/)N2[$1]++}
   END{
      for(c in C1){
         if((N1[c]==0)&&(C2[c]>0)&&(N2[c]>0)){
            S="we have achieved a category."
            }
          else S=sprintf( "we have achieved a %d%% success rate.", C2[c]*100/C1[c])
         printf "For the ID-%d, %s\n", c, S
         }
      }' file1 file2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34061598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档