Сложный 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
Таким образом, в file1 для соответствия 'AL' я должен заменить column8 на column2 из file2 и column9 на column3 из file2. Как добиться этого с помощью awk или чего-то подобного, но не perl, спасибо.:)
И условия в каком-то псевдокоде:
if (file2[col1] == file1[col7])
file1[col8] = file2[col2]
file1[col9] = file2[col3]
1 ответ
Нижеприведенное 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
с фактическими значениями столбца 2 и столбца 3 на столбец 1 и поддерживать его в массивах col2
а также col3
, Потом на разборе file1
с условием ($7 in col2 && $7 in col3)
мы выбираем эти строки в file1
чья $7
принадлежит к одному из массивов и, если так, подставьте значения.