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

时间:2015-12-03 08:58:37

标签: bash awk sed

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

文件1:

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:

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

期望的输出:

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.

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

awk 'BEGIN { FS=OFS=";" } NR==FNR{cnt[$1]++; next} { cnt2[$1]++;}  END{ for (ID in cnt){ print ID, "CAT: "cnt[ID],"Manual: "cnt2[ID];}}'

1 个答案:

答案 0 :(得分:0)

Awk就是为了这个

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