Есть много способов...
Вы можете использовать
sort
,tr
unique
иpaste
и$()
выполнить их и «преобразования вывода в переменную»#!/bin/bash var1="1, 2, 3, 4"; var2="3, 4, 5, 6" var3=$(echo " $, $" | tr ',' '\n' | sort | uniq -u | paste -sd,) echo $var3
1, 2, 5, 6
Для каждой из предыдущих команд вы можете прочитать больше, например,
man sort
Вы можете преобразовать переменную в массивах bash и поработать с ними (используйте подсказку как подсказку, потому что существует бесчисленное множество способов реализовать ее ...)
#!/bin/bash#!/bin/bash var1="1, 2, 3, 4"; var2="3, 4, 5, 6" # here you transform the variable in array IFS=',' read -ra ADDR <<< "$var1" IFS=',' read -ra ADDR2 <<< "$var2" # then for each element in the 1st array you search if in the 2nd too SEP=""; var3="" for i in "$"; do Found=0 for j in "$"; do [[ "$i" -eq "$j" ]] && Found=1 done [[ $Found == 0 ]] && { var3="$var3$SEP$i" ; SEP=", "; } done # then for each element in the 2nd array you search if in the 1st too for j in "$"; do Found=0 for i in "$"; do [[ "$i" -eq "$j" ]] && Found=1 done [[ $Found == 0 ]] && { var3="$var3$SEP$j" ; SEP=", "; } done echo $var3
используя
awk
(или, если быть точнымgawk
)#!/bin/bash var1="1, 2, 3, 4"; var2="3, 4, 5, 6" var3=$(echo "$var1, $var2" | \ awk -F ',' ' } END{ SEP=""; for (i in A) } }' ) echo $var3
Примечание: второй и третий выходы не упорядочены ...
Обновленные примечания : ... и до $var1
и $var2
потому, что в вашем странном ( :-)
) формате есть пробелы после запятой ( ,
), поэтому вам нужно уделить особое внимание всем командам, в которых в качестве разделителя используется только один символ ... это исправляет проблема, если , 1
во второй строке было ... то, что вы не можете найти, man <command>
вы можете попытаться найти с man bash
или help command
...
До тошноты :
diff
стиль, в духе вашей попытки ... может быть, вы можете найти выходной формат более уютно (man diff
)diff --ignore-all-space \ <(echo "$var1" | tr ',' '\n' ) <(echo "$var2" | tr ',' '\n')\ | grep -v "^---" | grep -v "^[0-9c0-9]" | tr -d '<||>|| |' \ | paste -sd,