AWK合并值并替换字符串

时间:2015-12-07 12:15:39

标签: bash awk

我有两个文件,一个用制表符分隔,另一个用分号分隔。两个文件在第一列中都有一个公共ID。一方面,我想根据公共ID组合第3列中的值。另一方面,我希望将第一个文件的第2列中的字符串替换为第二个文件的第2列中的字符串,同时遵守公共ID。

第一档:

ID;String;Category;
2;es un anuncio interesante que le puede servir para alguien;321;0;;
3;es un anuncio de un banco que quiere presentarse;72;0;;
4;es un anuncio de un banco que ofrece prestamos para empresas.;52;0;;
4;es un anuncio de un banco que ofrece prestamos para empresas.;70;0;;
5;credito pyme banamex para hacer crecer tu negocio;50;0;;
5;credito pyme banamex para hacer crecer tu negocio;52;0;;
5;credito pyme banamex para hacer crecer tu negocio;70;0;;
5;credito pyme banamex para hacer crecer tu negocio;71;0;;

第二档:

ID    String    Category;
2   Es un anuncio interesante que le puede servir para alguien.
3   Es un anuncio de un banco que quiere presentarse.
4   Es un anuncio de un banco que ofrece prestamos para empresas.
5   Credito Pyme Banamex para hacer crecer tu negocio.

期望的输出:

ID    String    Category
2   Es un anuncio interesante que le puede servir para alguien. 321
3   Es un anuncio de un banco que quiere presentarse.   72
4   Es un anuncio de un banco que ofrece prestamos para empresas.   52  70
5   Credito Pyme Banamex para hacer crecer tu negocio.  50  52  70  71

我做了什么:

awk 'BEGIN { FS=";";} NR==FNR{ CAT[$1]=CAT[$1]"\t"$3; next;}{FS="\t";textos[$1]=$2;} END{ for (ID in CAT) {print ID,textos[ID],CAT[ID];}}' fileA fileB

我的输出:

2   Es un anuncio interesante que le puede servir para alguien.
3   Es un anuncio de un banco que quiere presentarse.   72
4   Es un anuncio de un banco que ofrece prestamos para empresas.   52   70
5   Credito Pyme Banamex para hacer crecer tu negocio   50   52   70   71
¡¡In the first line the value of the third column doesn't appear!!

1 个答案:

答案 0 :(得分:2)

你可以使用这个awk:

awk -F';' -v OFS='\t' 'FNR==NR {
   a[$1] = a[$1] OFS $3
   next
}
FNR==1 {
   FS="\t"
   print
}
$1 in a {
   print $1, $2 a[$1]
}' file1 file2

<强>输出:

ID  String  Category
2   Es un anuncio interesante que le puede servir para alguien. 321
3   Es un anuncio de un banco que quiere presentarse.   72
4   Es un anuncio de un banco que ofrece prestamos para empresas.   52  70
5   Credito Pyme Banamex para hacer crecer tu negocio.  50  52  70  71