Предполагая, что вам нужны подстановки в формате file_B.txt, как предложил Спайк, облегченная база данных, такая как sqlite, могла бы это сделать.
Следующее будет читать file_A.txt и file_B.txt во временную базу данных в памяти и выводить результаты в файл TSV MODIFIED-file_B.txt
sqlite3 -separator $'\t' << EOF > MODIFIED-file_B.txt
CREATE TABLE a ( id INTEGER PRIMARY KEY, name );
.import file_A.txt a
CREATE TABLE b (id1 INTEGER,name1 TEXT,id2 INTEGER,name2 TEXT);
.import file_B.txt b
SELECT b.id1,
ifnull((SELECT name from a WHERE a.id=b.id1),b.name1),
b.id2,
ifnull((SELECT name from a WHERE a.id=b.id2),b.name2)
FROM b;
EOF
Это считывает каждый файл в отдельную таблицу, а затем выводит таблица b с вашими заменами A, если они доступны, в противном случае возвращает исходное B_name.
Если использование памяти вызывает беспокойство, вы можете запустить его с именем файла, например sqlite3 -separator $ '\ t'porary.db
для создания временного файла.