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 шт):
Используйте Awk:
BEGIN {
FS = "=";
}
{
a[$1] = $2;
}
END {
for (i in a) {
print(i "=" a[i]);
};
}
$ awk -f ./tmp.awk ./1.txt ./2.txt
если имена всех ваших переменных начинаются, например, со строки "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".