Cравнение строк в двух файлах

Что имееться - два файла: 1.txt и 2.txt

В 1.txt:

val1=1
val2=2
val3=3
val4=4

В 2.txt:

val1=11
val4=44
val5=5
val6=6

Каким образом на баше сравнить эти два файла построчно и все переменые из файлы 1.txt у которых значения отличаються от 2.txt заменить на значения из 2.txt + добавить переменные которые остутствуют в файле 1.txt что бы на выходе получился файл:

val1=11
val2=2
val3=3
val4=44
val5=5
val6=6

Можно на основании этих двух файлов формировать 3 файл 3.txt с соответствующими изменениями. Большое спасибо за помощь.


Ответы (2 шт):

Автор решения: Ainar-G

Используйте Awk:

BEGIN {
	FS = "=";
}

{
	a[$1] = $2;
}

END {
	for (i in a) {
		print(i "=" a[i]);
	};
}
$ awk -f ./tmp.awk ./1.txt ./2.txt
→ Ссылка
Автор решения: aleksandr barakin

если имена всех ваших переменных начинаются, например, со строки "val", то можно сделать, например, так:

#!/bin/bash
unset ${!val@}
source 1.txt
source 2.txt
for x in ${!val@}; do
   echo "$x=${!x}"
done > 3.txt

вся «хитрость» — в т.н. parameter expansion:

${!prefix*}
${!prefix@}

Expands to the names of variables whose names begin with prefix, separated by the first character of the IFS special variable.

первая из команд — unset — добавлена на всякий случай. она удалит все переменные, имена которых возвращает уже упомянутая конструкция ${!val@}: вдруг у вас в окружении затесались какие-нибудь переменные, имена которых тоже начинаются со строки "val".

→ Ссылка