Сложный 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 принадлежит к одному из массивов и, если так, подставьте значения.

Другие вопросы по тегам