Вы хотите, чтобы все записи из list_A были дополнены всеми записями из list_B для
которого в списке А. уже нет подходящего имени. Математически это:
A + B - {w in B | (w,value) in A }
Есть много способов сделать это, в зависимости от доступа и необходимой эффективности.
- Если вы можете изменить DB1 (с помощью A), затем загрузить таблицу B из DB2, загрузить ее в DB1, а затем извлечь данные с соответствующим объединением
- Если вы не можете изменить DB1, тогда загрузите и A, и B, и объедините их в один и тот же поток, с A и B, а затем отсортируйте по первому полю. Затем обработайте поток по одной записи за раз. Дубликаты имен будут соседствовать. Если одно и то же имя появляется более одного раза, выведите первую и проигнорируйте последующие записи с тем же именем.
Вот пример решения вашей проблемы (начиная с двух списков имен / значений):
#!/bin/bash
A="Smith value1
Jones value2
Wilson value3"
B="Smith value10
Wilson value11
Fox value12
Brown value13"
PrevName="Not a valid name"
echo "$A
$B" | sort -k1 |
while read Name Value
do
if [ "$Name" != "$PrevName" ]; then
echo $Name $Value
fi
PrevName="$Name"
done > outfile
Вот вывод:
Brown value13
Fox value12
Jones value2
Smith value1
Wilson value11
Это решение, конечно, предполагает, что вам разрешено изменять порядок записей, как это делается на шаге sort .