#!/bin/bash ###### --HILFE-- ##################################### if [ "$#" -eq "0" ]||[ "$1" == "-h" ]||[ "$1" == "--help" ] then echo '##########################################################' echo "$0"' -f{Field} -r{recursive} inFile outFile' echo "$0"' -f NR {defines the field to search for}' echo "$0"' -r {Show the result of the search in reverse order}' echo "$0"' inFile {File to sort}' echo "$0"' outFile {File where to write}' echo 'EXAMPLE' echo "$0"' -f3 -r indata.txt outdata.txt' echo '##########################################################' exit 0 fi ###### --Reihenfolge-- ############################### # rf=1 ------> Name - Mail - Domain # rf=2 ------> Name - Domain - Mail # rf=3 ------> Domain - Mail - Name # rf=4 ------> Domain - Name - Mail # rf=5 ------> Mail - Name - Domain # rf=6 ------> Mail - Domain - Name ##################################################### rf=1 ###### --Tabs Anzahl zwischen den Feldern-- ######### # tab=num # num -------> Anzahl der Tabs-- #################### # num -------> Minimum = 1-- ######################## ##################################################### tab=6 # # # A B H I E R N I C H T M E H R M O D I F I Z I E R E N ##################################### # A B H I E R N I C H T M E H R M O D I F I Z I E R E N ##################################### # A B H I E R N I C H T M E H R M O D I F I Z I E R E N ##################################### # A B H I E R N I C H T M E H R M O D I F I Z I E R E N ##################################### # A B H I E R N I C H T M E H R M O D I F I Z I E R E N ##################################### # ###### --Einlesen der Optionen-- #################### while [ "$#" -ne "0" ] do opt=$(echo $1|cut -c-2) if [ "$opt" == "-f" ] then chala=$(echo $1|wc -c|tr -d " ") if [ "$chala" -lt "4" ] then field=-k$2 else znum=$(echo $1|cut -c3) field=-k$znum fi fi if [ "$1" == "-r" ] then rec="$1" fi if [ -f "$1" ] then data=$1 if [ ! -z "$2" ] then daout=$2 fi fi shift done tanu=0 ta='\t' while [ "$tanu" -lt "$tab" ] do tabn="$tabn""$ta" (( tanu++ )) done ################################################### num=0 ###### --Ausalgern Quell-Datei ohne "#"-- ######### cat $data|cut -f1 -d"#" > /tmp/$0_$$ ################################################### # #####ä --Zeilenweise einlesen Auslagerung-- ####### while read line do ###### --Zeilen Zerlegung-- ###################### line=$(echo $line|tr " " "\t"|tr -s " "|sed '/^$/d') domain=$(echo $line|cut -f2 -d"@"|cut -f1 -d" ") mail=$(echo $line|cut -f1 -d" ") uname=$(echo $line|cut -f2 -d" ") ################################################## # ###### --Behandlung nicht leerer Zeilen-- ######## if [ ! -z "$line" ] then ##### --Felder Abarbeitung-- #################### for a in $line do ###### --Sortier Reihenfolge festlegen-- ####### case $rf in 1)echo -en $uname"$tabn"$mail"$tabn"$domain >> /tmp/$0_sort_$$;; 2)echo -en $uname"$tabn"$domain"$tabn"$mail >> /tmp/$0_sort_$$;; 3)echo -en $domain"$tabn"$mail"$tabn"$uname >> /tmp/$0_sort_$$;; 4)echo -en $domain"$tabn"$uname"$tabn"$mail >> /tmp/$0_sort_$$;; 5)echo -en $mail"$tabn"$uname"$tabn"$domain >> /tmp/$0_sort_$$;; 6)echo -en $mail"$tabn"$domain"$tabn"$uname >> /tmp/$0_sort_$$;; esac domain="" uname="" mail="" (( num++ )) done if [ "$num" -gt "1" ] then echo >> /tmp/$0_sort_$$ fi fi done < /tmp/$0_$$ rm /tmp/$0_$$ ###### --Ausgabe-- ############################## if [ ! -z "$daout" ] then if [ -f "$daout" ] then echo "Output Datei exestiert bereits." read -p "überschreiben? [y/n]n:" antw1 if [ "$antw1" == "y" ]||[ "$antw1" == "Y" ] then sort -u $field $rec /tmp/$0_sort_$$ > $daout rm /tmp/$0_sort_$$ exit 0 else echo "Abruch durch Benutzer!" rm /tmp/$0_sort_$$ exit 1 fi fi if [ ! -f "$daout" ] then sort -u $field $rec /tmp/$0_sort_$$ > $daout rm /tmp/$0_sort_$$ exit 0 fi fi sort -u $field $rec /tmp/$0_sort_$$ rm /tmp/$0_sort_$$ exit 0