Ist quasi eine ergänzung zu comm da es die Liste vollständig vergleicht und nicht nur zeilenweise, ich hoffe jetzt sagt keiner dafür gibts doch XY
Naja ich wollte das mal posten um eure Meinungen zu hören.
Code: Alles auswählen
#!/bin/bash
# script zum kompletten vergleichen von zwei listen
# copyright by arne keller
# Zuerst wird geprüft ob zwei Parameter übergeben wurden und
# ob die Dateien lessbar sind bzw. existieren.
if [ $# != 3 ]; then
start=0
echo "Syntax:comm_advanced <operand> <liste1> <liste2>"
else
if [ -r $2 -a -r $3 ]; then
start=1
else
start=0
echo "Datei existiert nicht, oder ist nicht lesbar."
fi
fi
if [ $start == 1 ]; then
first_array=($(cat "$2"))
second_array=($(cat "$3"))
count_first=${#first_array[*]}
count_second=${#second_array[*]}
z=0
for ((i=0;i<count_first; i++)); do
tmp1=${first_array[i]}
for ((j=0;j<count_second; j++)); do
if [ $tmp1 == ${second_array[j]} ]; then
array_equal[z]=${second_array[j]}
z=$z+1
fi
done
done
y=0
count_equal=${#array_equal[*]}
for ((i=0;i<count_second; i++)); do
dontcopy=0
tmp1=${second_array[i]}
for ((j=0;j<count_equal; j++)); do
if [ $tmp1 == ${array_equal[j]} ]; then
dontcopy=1
fi
done
if [ $dontcopy != 1 ]; then
array_non_equal[y]=${second_array[i]}
y=$y+1
fi
done
if [ $1 == "-1" ]; then
for i in "${array_equal[@]}"; do
echo "$i"
done
elif [ $1 == "-2" ]; then
for i in "${array_non_equal[@]}"; do
echo "$i"
done
else
echo "falscher Operand -1 für die Ausgabe gleicher Elemente oder -2 für die Ausgabe ungleicher Elemente"
fi
fi
Gruß Arne