Es gibt viele Wege...
Sie können verwendet werden
sort
,tr
unique
undpaste
und$()
sie auszuführen, und „die Ausgabe in einer Variablen - Transformation“#!/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
Für jeden der vorherigen Befehle können Sie mehr lesen mit z
man sort
Sie können die Variable in Bash-Arrays transformieren und daran arbeiten (nehmen Sie die folgenden Anweisungen als Hinweis, da es unzählige Möglichkeiten gibt, sie zu realisieren ...)
#!/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
verwenden
awk
(oder um genau zu seingawk
)#!/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
Hinweis: Der zweite und der dritte Ausgang sind nicht bestellt ...
Aktualisierte Hinweise : ... und es gibt ein Leerzeichen vor $var1
und $var2
da in Ihrem komischen ( :-)
) Format Leerzeichen hinter dem Komma ( ,
) stehen, müssen Sie also besonders auf alle Befehle achten, bei denen nur ein Zeichen als Trennzeichen verwendet wird Problem, wenn es eine , 1
in der zweiten Saite gab ... was Sie nicht finden man <command>
können, können Sie versuchen mit man bash
oder mit help command
...
Ad-Übelkeit :
diff
Stil, im Sinne Ihres Versuchs ... vielleicht können Sie nach einem gemütlicheren Ausgabeformat suchen (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,