复杂的 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 列值,并将其维护在数组 col2
和 col3
中。然后在使用条件 ( in col2 && in col3)
解析 file1
时,我们 select file1
中的那些行,其
属于任一数组,如果是,则替换值.
如果一个字段匹配,我需要将一个文件中的部分值替换为另一个文件中的值。
要替换的文件:
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 列值,并将其维护在数组 col2
和 col3
中。然后在使用条件 ( in col2 && in col3)
解析 file1
时,我们 select file1
中的那些行,其 属于任一数组,如果是,则替换值.