У меня есть следующий код:
get_list_a() { $MYSQL -B -u $USER --passwword="$PW" $DB <<EOF select name, value from mytable_a EOF } get_list_b() { $MYSQL -B -u $USER --passwword="$PW" $DB <<EOF select name, value from mytable_b EOF } get_list_a >$test.txt
Теперь я должен объединить a и b сначала и удалить, все копирует (ключ является именем, первым столбцом), и затем запишите им в test.txt. Перечислите a и перечислите b, отдельно, как предполагается, отличны. Если x в a и y в b существуют таким образом, что x.name=y.name, то я только хочу сохранить x., как я делаю это?
Вы хотите, чтобы все записи из списка_A были дополнены всеми записями из списка_B для которому еще нет подходящего имени в списке A. Математически это:
A + B - {w in B | (w,value) in A }
Есть много способов сделать это, в зависимости от доступа и необходимой эффективности.
Вот пример решения вашей проблемы (начиная с двух списков имен / значений):
#!/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 .