например данные:
info1=x;info2=y;xyz=abc;info1=othervalue;info2=.
Предполагая, что вы всегда хотите сохранить первый экземпляр имени!
echo "info1=x;info2=y;xyz=abc;info1=othervalue;info2=." |sed -e 's/;/\n/g' |awk -F= '{ if ($1 in words == 0) words[$1]=$2} END { for (w in words) printf"%s=%s;", w, words[w]}'
результат:
info1=x;info2=y;xyz=abc;
С вами будут адаптироваться к вашим данным.
Я использовал gawk v 4.0.2
Пояснение:
1. sed делит строку на строки в месте, где встречается точка с запятой,
2. опция -e означает, что можно использовать escape-символы
3. -F = указывает AWK делить строки на слова в месте =
4. {если ($ 1 в словах == 0) слов [$ 1] = $ 2} для каждой строки, проверьте, есть ли слово 1 в массиве слов, и если нет, добавьте элемент массива слов со словом word1 со значением слова 2
5. END {...} делается в конце, читает все элементы массива слов и затем printf печатает ключи и значения в ожидаемом формате