我有两个文件,一个用制表符分隔,另一个用分号分隔。这两个文件在第一列中都有一个共同的ID。一方面,我想根据公共ID在第三列中合并值。另一方面,我想用第二个文件第2列中的字符串替换第一个文件第2列中的字符串,同时考虑到Common ID。AWK合并值并替换字符串
第一个文件:
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!!
我们需要任何特别的原因要受到如此多的线,这样长的输入线?我不明白为什么你不能表达你的问题,说5行输入,每行5个字段。如果你不能用简单的字段将你的例子简化成简洁的大小,我怀疑是否有很多人会费心去理解它,以便他们能够帮助你。 –
@EdMorton谢谢!对于你的建议,现在更好理解了? – Polucho
是的,很多,但我看到你已经接受了一个答案,所以它没有让很多专家有时间看看你的问题,并试图帮助你。 FWIW您选择的答案违反了awk的变量命名约定,在错误的地方设置了'FS'(功能错误被第一行隐藏,而不是第一行,否则效率低下),包含冗余代码,具有伪随机分号和在由某些awk运行时会产生语法错误。祝你好运! –