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

Complex awk replace from one file to another

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

要替换的文件:

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' 匹配,我应该用 file2 的 column2 替换 column8,用 file2 的 column3 替换 column9。如何使用 awk 或类似的东西而不是 perl 来实现这一点,谢谢。 :)

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

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

下面的 awk 应该适合你

awk -F"," 'BEGIN{OFS=",";} FNR==NR{col2[]=; col3[]=;next} ( in col2){=col2[]; =col3[];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 中。然后在使用条件 ( in col2 && in col3) 解析 file1 时,我们 select file1 中的那些行,其 属于任一数组,如果是,则替换值.