复杂的awk从一个文件替换到另一个文件

时间:2016-12-28 08:37:07

标签: bash awk gawk

如果一个字段匹配,我需要用另一个文件中的值替换一个文件中的部分值。

要替换的文件:

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

因此,在file1中,对于'AL'匹配,我应该将column8替换为file2中的column2,将column9替换为来自file2的column3。如何使用awk或类似的东西实现这一点,但不是perl,谢谢。 :)

以及某种伪代码中的条件:

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

1 个答案:

答案 0 :(得分: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中。然后在使用条件file1解析($7 in col2 && $7 in col3)时,我们选择file1$7属于任一数组的那些行,如果是,则替换值。