2016-12-28 51 views
1

如果一個字段匹配,我需要用另一個文件中的值替換其中的一部分值。被替換複雜的awk從一個文件替換到另一個

文件:包含正確的價值觀

NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AL',300,200,12,1,24,1,19,110,220,1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AG',300,200,12,1,24,1,19,110,220,1 

文件:

'AL',220,110 
'DZ',379,189.5 
'AO',931,465.5 
'AG',659,329.5 

所以在文件1對「基地」的比賽,我應該從文件2和column9與欄3替換COLUMN2 column8來自file2。如何用awk或類似的東西來實現這一點,但不是perl,謝謝。 :)

而且在某種僞代碼條件:

if (file2[col1] == file1[col7]) 
    file1[col8] = file2[col2] 
    file1[col9] = file2[col3] 

回答

3

以下awk應該只是罰款爲你

awk -F"," 'BEGIN{OFS=",";} FNR==NR{col2[$1]=$2; col3[$1]=$3;next} ($7 in col2){$8=col2[$7]; $9=col3[$7];print}' file2 file1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AL',220,110,12,1,24,1,19,110,220,1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AG',659,329.5,12,1,24,1,19,110,220,1 

的想法是首先創建file2哈希陣列每列1的實際列2和列3的值並將其保持在數組col2col3中。然後在條件爲($7 in col2 && $7 in col3)的條件下對file1進行解析時,我們選擇file1$7屬於任一數組中的那些行,如果是,則替換這些值。

+0

似乎基本上是相同的答案。 ++ –

+1

@JamesBrown:我會說一次.. :) – Inian

+1

謝謝你,它的作品就像一個魅力! @Inian – user3309234

相關問題