заменить строки в столбце соответствующим значением из другого файла с помощью awk - PullRequest
0 голосов
/ 18 июня 2020

У меня небольшая проблема при попытке использовать awk для замены некоторых строк в столбце, используя другой файл в качестве ссылки для замены. Я хочу, чтобы строки в третьем столбце моего File2 были заменены строками во втором столбце File1, когда они соответствуют строке первого столбца File1.

Вот файлы и желаемый результат для будьте более ясными.

File1

AAA   XZA
AAB   XSZ
AAC   XWQ
BAA   XCD

File2

ADZ-4       128720       AAA   451351351   5135   jhgt   215
SZQ-2       036051       AAB   55654   grt
KFD-9       036266       AAC 
ODS-10      036267       AAA   57321
POS-11      036268       AAC   8435435   764   frd

желаемый результат:

    ADZ-4       128720       XZA   451351351   5135   jhgt   215
    SZQ-2       036051       XSZ   55654   grt
    KFD-9       036266       XWQ 
    ODS-10      036267       XZA   57321
    POS-11      036268       XWQ   8435435   764   frd

Я пробовал следующую командную строку.

 awk 'FNR==NR{a[$1]=$2;next} {if ($3 in a){$3=a[1]}; print $0}' File1 File2 

но я почти уверен, что делаю что-то неправильно во втором фигурном тормозе, так как он распечатывает файл с удаленным третьим столбцом. Если бы у меня было всего несколько, я бы с радостью использовал sed, у меня есть 500+ замен ...

Любая помощь будет оценена, и если вы можете объяснить, чтобы я мог извлечь уроки из своей ошибки, я был бы безмерно благодарен.

1 Ответ

0 голосов
/ 18 июня 2020

Вы неправильно сослались на ассоциативный массив. Пожалуйста, измените:

...{if ($3 in a){$3=a[1]}; print $0...

на:

...{if ($3 in a){$3=a[$3]}; print $0

Ключи вашего массива a равны AAA,AAB... вместо 1,2,3....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...