Listen vollständig vergleichen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
AKey
Beiträge: 15
Registriert: 29.12.2004 04:56:38
Kontaktdaten:

Listen vollständig vergleichen

Beitrag von AKey » 02.10.2006 01:17:52

Hallo ich habe ein Script zum vergleichen von zwei Listen geschrieben.

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
Bin für Vorschläge auch dankbar

Gruß Arne

Antworten