2015-12-07 127 views
1

我有兩個文件,一個用製表符分隔,另一個用分號分隔。這兩個文件在第一列中都有一個共同的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!! 
+1

我們需要任何特別的原因要受到如此多的線,這樣長的輸入線?我不明白爲什麼你不能表達你的問題,說5行輸入,每行5個字段。如果你不能用簡單的字段將你的例子簡化成簡潔的大小,我懷疑是否有很多人會費心去理解它,以便他們能夠幫助你。 –

+1

@EdMorton謝謝!對於你的建議,現在更好理解了? – Polucho

+3

是的,很多,但我看到你已經接受了一個答案,所以它沒有讓很多專家有時間看看你的問題,並試圖幫助你。 FWIW您選擇的答案違反了awk的變量命名約定,在錯誤的地方設置了'FS'(功能錯誤被第一行隱藏,而不是第一行,否則效率低下),包含冗餘代碼,具有僞隨機分號和在由某些awk運行時會產生語法錯誤。祝你好運! –

回答

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 
+0

我必須填寫第一個文件的第二列與第二個文件的第二列。通過匹配ID! – Polucho

+0

謝謝!現在第2欄中的文字是正確的。但第一行(ID 2)未打印。 – Polucho

+0

好的,但是..它缺少第三列的值。在這種情況下,將是321 – Polucho