Anzeige:
Ergebnis 1 bis 13 von 13

Thema: Script - Mail Black List sortieren...

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.04.1999
    Ort
    Rheinstetten
    Beiträge
    122

    Script - Mail Black List sortieren...

    Hallo,

    eine kleine Frage.
    Ich habe eine Mail Black List die sich etwas aufgebläht hat. Diese möchte ich gerne mal nach Top Level Domain (also von hinten nach vorne) sortieren und ausmisten.
    Da ich dieses wirklich nur alle Jubel-Jahre mal machen will, benötige ich ein Script, das mir das möglichst ohne großen Aufwand macht.
    Und da man ja bekanntlich das Rad nicht zwei mal neu erfinden soll, habe ich schon bei Google gesucht. Leider ohne nutzbares Ergebnis.

    Hat jemand zufällig ein kleines (Shell-)Script herum liegen und würde dieses weiter geben?

    Und bitte, keine Antworten wie, das ist so einfach, setz dich selber hin.
    Das werde ich tun, wenn ich keine einfache (existierende) Lösung finde, aber ich bin inzwischen der Ansicht, dass man gerade bei Linux nicht alles doppelt und dreifach neu machen (erfinden) muss. Das machen andere schon zu genüge.
    Wenn niemand so etwas herum liegen hat, einfach nicht antworten. Dann werde ich mich mal bei Gelegenheit hin setzen und meine alten Perl/Shell-Scipt Kenntnisse wieder aus der Schublade kramen müssen.

    Danke!

  2. #2
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von robert Beitrag anzeigen
    Hallo,
    Diese möchte ich gerne mal nach Top Level Domain (also von hinten nach vorne) sortieren und ausmisten.
    Danke!
    Das ist eine nicht so besonders schwierige Aufgabe.

    Ich weiß nicht wie schnell du eine Lösung brauchts,
    aber vielleicht könnte man dies als User Aufgabe benutzen.

    Wenn dir das recht ist.

    Wie z. B.
    http://www.mrunix.de/forums/showthre...ighlight=Sport

    Jeder kann mitmachen + es kommen Lösungen in unterschiedlichen Sprachen zustande. (hoffentlich)
    Geändert von Romanday (12-09-2006 um 08:18 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  3. #3
    Registrierter Benutzer
    Registriert seit
    13.04.1999
    Ort
    Rheinstetten
    Beiträge
    122
    Hallo,

    ich habe meine alten Kenntnisse doch mal wieder raus gekramt und selber was zusammen gebastelt. Hatte gerade etwas Zeit und wollte das erledigt haben.

    Keine Ahnung ob die Lösung optimal ist, aber sie erfüllt ihren Zweck.

    Ich sollte vielleicht dazu sagen, dass die Liste je Zeile eine Mail Adresse enthält, wobei die Namen vorher durch ein '*' ersetzt werden.
    Also aus einem name@domain.tld wird ein *@domain.tld. Das könnte ich aber auch noch in das Script einbauen.
    Code:
    #!/bin/sh
    #
    # Sortiere Mail Liste nach TopLevelDomain
    #
    
    TLDLIST="/tmp/tldlist.tmp"
    TMPTLD1="/tmp/tldlist1.tmp"
    TMPTLD2="/tmp/tldlist2.tmp"
    
    if [ "$1" = "" ]; then
      echo "Usage: $0 <List-File>"
      exit 1
    fi
    
    I=0
    if [ -f "$1" ]; then
      sort -u "$1" > $TLDLIST
    #  echo "Lese $1 ein..."
      cat "$TLDLIST" | while read; do
        (( I++ ))
        IO=`printf "%02d" $I`
        TLD=${REPLY##*.}
    #    echo "$IO: $TLD"
        if [ -n "$TLD" ]; then
          echo ".$TLD" | tr "A-Z" "a-z" >> $TMPTLD1
        fi
      done
    
      sort -u $TMPTLD1 > $TMPTLD2
      rm $TMPTLD1
      cat $TMPTLD2 | while read; do
        grep "${REPLY}$" $TLDLIST >> $TMPTLD1
      done
      grep "@" $TMPTLD1 > "${1}.sorted"
    else
      echo "$1 is not a file!"
      exit 1
    fi
    
    rm $TMPTLD1 $TMPTLD2 $TLDLIST
    Die Variable I und die echo Ausgaben waren nur für mich zum Test...
    Also einfach alles damit ignorieren.
    Geändert von robert (12-09-2006 um 08:47 Uhr)

  4. #4
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von robert Beitrag anzeigen
    Hallo,

    ich habe meine alten Kenntnisse doch mal wieder raus gekramt und selber was zusammen gebastelt. Hatte gerade etwas Zeit und wollte das erledigt haben.
    Auch eine Möglichkeit sich darzustellen.
    Das könntest Du aber viel einfacher haben.

    Einfach die Scripte auf deiner Page dokumentieren +
    Link in der Sig. zu deiner Page.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  5. #5
    Registrierter Benutzer
    Registriert seit
    13.04.1999
    Ort
    Rheinstetten
    Beiträge
    122
    Hmm? Darstellen?

    Nee, ich wollte das einfach weg haben und habe mal ein paar alte Unix Bücher durchforstet.
    Hätte selber nicht gedacht, dass ich das noch so hin bekomme. Schon lange nichts mehr in der Art gemacht.
    Wenn du übrigens Verbesserungsvorschläge für das Scipt oder ein besseres hast, nur zu, ich bin immer für Vorschläge zu haben.

    Gruß

    Robert
    Geändert von robert (12-09-2006 um 23:39 Uhr)

  6. #6
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von robert Beitrag anzeigen
    Wenn du übrigens Verbesserungsvorschläge für das Scipt oder ein besseres hast, nur zu, ich bin immer für Vorschläge zu haben.

    Gruß

    Robert
    Das ist ein wenig fummelig das über die Shell zu lösen, da die Shell
    nur eingeschränkt mit Arrays umgehen kann.
    Ich hätte das in einer Scriptsprache in der 2. Dimension gemacht.
    Dann hätte man 1 Lese + 1 Schreibvorgang sparen können.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Hallo Robert,

    ich habe eine etwas kleinere und vielleicht auch übersichtlichere Lösung für Dich. Probier´s doch damit mal.

    Übrigens:
    - es war nicht fummelig über die Shell ...
    - ich brauchte keine Arrays dazu ...
    - auch eine Scriptsprache der 2. Dimension scheint mir unnötig ...
    - gespart wurde lediglich mit konkreten Vorschlägen ...
    ---> daher mal mein Entwurf für Dich

    Viele Grüße
    zst

    Code:
    #!/bin/bash
    # Mailadressen nach Top-Level-Domain sortieren
    # 13.09.2006 - zst
    
    if [ $# -ne 1 ]
        then
        echo "Aufruf mit Adressliste!"
        exit 1
    fi
    
    rm -f $1.neu
    
    if [ -f $1 ]
        then
        tr "A-Z" "a-z" < $1 | sort -u >$1.sort 
        cut -d "@" -f2 $1.sort >$1.tld
        for i in `cut -d"." -f2 $1.tld | sort -u`
          do
          grep "${i}$" $1.sort >>$1.neu
        done
    fi
    
    rm $1.tld
    rm $1.sort
    
    echo "Ergebnis in $1.neu"
    cat $1.neu

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Code:
    awk -F. '{for (i=NF;i>1;i--) {printf "%s.",$i} print $1}' DATEINAME | sort | awk -F. '{for (i=NF;i>1;i--) {printf "%s.",$i} print $1}'

  9. #9
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von Joghurt Beitrag anzeigen
    Code:
    awk -F. '{for (i=NF;i>1;i--) {printf "%s.",$i} print $1}' DATEINAME | sort | awk -F. '{for (i=NF;i>1;i--) {printf "%s.",$i} print $1}'

    PHP-Code:
    awk -F'{print $2"."$1 }' sort awk -F'{print $2"."$1 }' 
    Er kann das natürlich auch in Vi mit einer Rückreferenzierung lösen.
    Geändert von Romanday (15-09-2006 um 05:35 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  10. #10
    Registrierter Benutzer
    Registriert seit
    13.04.1999
    Ort
    Rheinstetten
    Beiträge
    122
    Hallo,

    das sieht natürlich alles etwas besser aus als bei mir. Ich habe es mir gerade so zusammen gefummelt, wie ich es noch aus Büchern zusammen bekommen habe.

    @Romanday
    Mein Problem ist einfach, dass ich das Script wirklich nur alle 2-3 Monate mal zum "Säubern" auf der Konsole starte. Von daher kommt mir ein einfaches Shell-Script bzw. ein Shell-Command natürlich entgegen.

    @ZST
    Wenn du nichts dagegen hast, übernehme ich deines mal. Das sieht sauberer aus als bei mir.
    Allerdings fällt mir dabei auf, dass die Zeilen, die kein '@' enthalten, bei dir nicht ausgefiltert werden.
    Das hatte ich bei mir mit dem 'grep "@" ' gemacht, da manche Zeilen eben eine ungültige Mail Adr. enthalten, also ohne '@' Zeichen.
    Aber die eine Zeile kann ich ja noch einfügen.

    Gruß

    Robert

    /Nachtrag
    @ZST bei deinem Script scheinen danach einige Zeilen/Einträge zu fehlen.
    Ich habe meines noch mal etwas "überarbeitet".
    Code:
    #!/bin/sh
    #
    # Sortiere Mail Liste nach TopLevelDomain
    #
    
    TLDLIST="/tmp/tldlist.tmp"
    TMPTLD1="/tmp/tldlist1.tmp"
    TMPTLD2="/tmp/tldlist2.tmp"
    
    if [ "$1" = "" ]; then
      echo "Usage: $0 <List-File>"
      exit 1
    fi
    
    if [ -f "$1" ]; then
      sort -u "$1" | sed "s/*/*@/" | sed "s/@@/@/" | tr "A-Z" "a-z" > $TLDLIST
      echo "" > $TMPTLD1
      cat "$TLDLIST" | while read; do
        TLD=${REPLY##*.}
        if [ -n "$TLD" ]; then
          echo ".$TLD$" >> $TMPTLD1
        fi
      done
      sort -u $TMPTLD1 > $TMPTLD2
    
      echo "" > $TMPTLD1
      grep -f $TMPTLD2 $TLDLIST >> $TMPTLD1
      grep "@" $TMPTLD1 > "${1}.sorted"
    else
      echo "$1 is not a file!"
      exit 1
    fi
    
    rm $TMPTLD1 $TMPTLD2 $TLDLIST
    Geändert von robert (15-09-2006 um 08:08 Uhr)

  11. #11
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von Romanday Beitrag anzeigen

    PHP-Code:
    awk -F'{print $2"."$1 }' sort awk -F'{print $2"."$1 }' 
    Aus "blabla.dyndns.org" wird dann "org.dyndns"...
    Domainnamen können auch mehr als 1 subdomain haben

  12. #12
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von Joghurt Beitrag anzeigen
    Aus "blabla.dyndns.org" wird dann "org.dyndns"...
    Domainnamen können auch mehr als 1 subdomain haben
    Stimmt, hatte ich vergessen.

    PHP-Code:
    awk '/@/{b=match($0,/[^.]+$/);s=substr($0,RSTART,RLENGTH); print s"|"$0 }' z|sort|awk '{gsub(/^[^|]+./,"",$0);print $0}' 
    Geändert von Romanday (15-09-2006 um 09:54 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  13. #13
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Wem das doch zu heftig ist nimmt die schnellere Tricki Version.

    PHP-Code:
    awk -F'/@/{print $NF,$0 }' sort awk '{print $2}' 
    Geändert von Romanday (15-09-2006 um 11:24 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •