Parameter an "sed" aus einer datei übergeben

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Ghostrider, 20.10.2005.

  1. #1 Ghostrider, 20.10.2005
    Ghostrider

    Ghostrider Grünschnabel

    Dabei seit:
    20.10.2005
    Beiträge:
    3
    Zustimmungen:
    0
    hallo zusammen,

    Versuche krampfhaft einen script auf die beine zu stellen, aber leider gelingt es mir nicht. Die Boardsuche habe ich auch schon misbraucht, aber ohne erfolg.

    zu mein problem:

    ich habe eine Liste "Haupt.Liste" ( bestehend aus 4 stelligen Hexzahlen) die dynamisch erstellt wird. Nach bestimte Kriterien werden einige zahlen aussortiert und in einer 2.Liste "Sort.Liste" abgelegt.

    Nun möchte ich die zahlen die aussortiert wurden (also die , in der Sort.liste), aus der hauptliste entfernen.

    Das Problem ist nur, das daß Skript auf einen Linux Server läuft, was nicht alle shell befehle unterstützt.
    So wie "cut" und "diff", was die aufgabe vereinfachen würde.

    jetzt habe ich gedacht, das man die zeilennummer ermitteln und die dann mit "sed" löschen könnte.

    Also so:

    dif=`cat /tmp/Sort.Liste`
    for l in ${dif}
    do
    grep -n "$l" /tmp/Haupt.Liste|sed s/:.*$// >> /tmp/zeilenNR
    done

    Nun weiß ich aber nicht wie ich den "sed" beibringen könnte die zeilennummern aus der datei zu lesen und hintereinander abzuarbeiten.

    Hat jemand vielleicht einen Tipp für mich, oder eine andere Lösung wie ich die Zahlen aus der Haupt.Liste löschen könnte ??

    Bin für jede Hilfe Dankbar !!

    mfg
    Ghostrider
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 21.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Um dir zu helfen, muss ich nochmal nachfragen:
    Wenn ich das richtig verstehe, hast du zwei Dateien.
    Der Inhalt der zweiten Datei soll aus der ersten Datei gelöscht werden.
    Content-file3=content-file1 - Content-file2

    Korrigiere mich, wenn ich das falsch verstehe.

    Nun die Frage:
    Wie sehen die Daten aus?
    Stehen die jeweils auf einer Zeile?
    Also ein Beispieldatensatz würde hier weiterhelfen.
    Können die daten denn doppelt vorkommen, oder sind diese auf eine Zeilennummer festgelegt?

    Zu sed und Zeilennummer:
    sed kennt im Adressbereich Zeilennummern.
    Beispiel
    sed -e '1,5 s/suchstring/replace-string/g' <textdatei >outputdatei
    Hier wird suchstring mit replacestring ersetzt, aber nur in Zeile 1 bis 5
    Eventuell hilft dir das weiter.
    Ansonsten schieb mal ein paar Beispieldatensätze rüber, dann werden dir geholfen ;)
    Bisher ließ sich noch das Meiste hier lösen.
    Eine Lösung mit perl, lass ich vorerst mal weg, da du ja mit sed arbeiten willst und das Ergebnis so einen größeren Selfmade-effekt hat.
    Du willst ja beim nächsten Problem dieser Art nicht gleich wieder vorm Scheunentor stehen. :oldman
    Gruß Wolfgang
     
  4. #3 Ghostrider, 21.10.2005
    Zuletzt bearbeitet: 21.10.2005
    Ghostrider

    Ghostrider Grünschnabel

    Dabei seit:
    20.10.2005
    Beiträge:
    3
    Zustimmungen:
    0
    ja das ist richtig.

    Hauptliste: (file1)
    0178
    0A7A
    0B74
    1632
    17DF
    1D6D
    1FD6
    2540
    26CC
    272D
    2866
    3216
    3F55
    4BE5
    4F07
    5877
    654C
    67AB
    6B77
    7CED
    7DB5
    88AA
    A515
    B0C6
    C0A6
    C444
    CB04
    E582

    Sort.Liste (file2)
    C444
    CB04
    E582

    Aber die zahlen ändern sich ständig, weil die dynamisch erstellt werden.
    Also es kann auch vorkommen, das garkeine zeilen , oder nur die 5., oder die 5. und die 19. gelöscht werden müssen.

    Das script , was die zeilennummer ermittelt, erstellt einen datei was so aussieht.

    zeilenNR
    26
    27
    28

    Stehe wie oben, jeweils auf einer Zeile und kommen nur einmal vor

    Ich hänge hier die Beispieldateien an

    Perl wird leider auch nicht unterstützt. Man kann nur binary's ausführen, oder den Bourne-Shell verwenden, was aber auf ein minimum reduziert wurde :(

    Danke für deine Hilfsbereitschaft!!

    mfg
    Ghostrider
     

    Anhänge:

  5. #4 Wolfgang, 22.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Schade, denn in perl wär das ein klassischer Einzeiler. ;)
    Nagut ich habe mal folgendes versucht, ist nicht so elegant, sollte aber gehen.
    Allerdings lasse ich dabei sed weg.

    Code:
    #!/bin/bash
    FILE1="sortliste";
    FILE2="Hauptliste";
    D=($(cat $FILE1));
    while read WERT
    do
       NOT="nothing";
       for I in ${D[*]}
       do
         if [ "$I" = "$WERT" ];
         then
         NOT="del";
         fi
       done
      if  [ "$NOT" = "nothing" ]; then
       echo $WERT;    
      fi
    done < $FILE2 >>result
    
    Man könnte zwar mit verkoppelten grep und einer ellenlangen Pipe rumbasteln, was mir aber alles nicht so recht zusagte.
    Deshalb diesen Vorschlag, der etwas übersichtlicher ist.

    Ist zwar sicher nicht elegant (aber das bin ich wenn überhaupt eher in perl), sollte jedoch funktionieren.

    Wenn die Sortliste allerdings riesig wird, könnte es ein Problem geben.

    Habe mal in den News ein Posting dazu abgesetzt,weil es mich nun auch interessiert, wie sowas besser mit reinen Shellwerkzeugen machbar ist. Mal sehen was diverse Gurus da so vorschlagen.

    Gruß Wolfgang
     
  6. #5 Wolfgang, 22.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    *lol*
    Es geht tatsächlich auch mit der bash mit einem Einzeiler

    Den Wald vor lauter Bäumen nicht sehend habe ich die hier sinnvolle Option -f von grep ganz übersehen.

    grep -f Sort.Liste -v hauptliste >Resultat


    :think: :think: 8)
    Byby Wolfgang
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 Ghostrider, 22.10.2005
    Ghostrider

    Ghostrider Grünschnabel

    Dabei seit:
    20.10.2005
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo Wolfgang,

    Danke für deine hilfe.
    Die option "-f" wird leider auch nicht unterstüzt, aber die lösung mit der "for" Schleife funktioniert super.
    Sowas ähnliches hatte ich auch versucht, aber bei mir hat es nicht funktioniert.

    Danke nochmal für deine mühe und hilfe !

    mfg
    Ghostrider
     
  9. #7 Wolfgang, 23.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    In was für einer Shell bist du eigentlich unterwegs?
    Die Option -f bei grep ist auch als fgrep zu finden.
    Freut mich aber trotzdem, wenn es so funktioniert.
    Bedenke aber, dass die Sort-Liste in einem Rutsch in den Speicher geladen wird.
    Wenn diese zu groß wird, ist es eventuell sinnvoll das auch noch als while read Schleife drumrum zu basteln, was dann aber bei jeder Zeile aus der Hauptliste die gesamte Datei sort.Liste einliest.
    Das wird sehr langsam.
    Methode zwei wäre also, die Datei ab einer bestimmten Größe zu teilen und das zweimal durchlaufen zu lassen, wobei result dann als Hauptliste und teil 2 der Sortliste als Sortliste benutzt würde.

    Gruß Wolfgang
    PS Interessiert mich wirklich, was das für ein System ist, wo kein perl und keine fgrep diff usw. zur Verfügung steht.
     
Thema:

Parameter an "sed" aus einer datei übergeben

Die Seite wird geladen...

Parameter an "sed" aus einer datei übergeben - Ähnliche Themen

  1. Parameter einer Variable zuordnen

    Parameter einer Variable zuordnen: Hallo, hoffe mein Titel kommt in etwa dem nahe was ich umsetzen möchte. Ich habe ein Script dem ich einen Parameter übergebe. Dieser...
  2. Aus einer Datei Parameter "erzeugen"

    Aus einer Datei Parameter "erzeugen": Hallo! Ich habe in einer Textdatei eine Zahl stehen (nur eine einzige Zahl), ich möchte die Datei lesen und eben diese Zahl als Parameter im...
  3. parameter zählen und jeden einer variable zuordnen

    parameter zählen und jeden einer variable zuordnen: hallo shell-freunde. ich befasse mich nur in meiner freizeit mit shellscripten, stehe aber nun vor einem problem, bei dessen lösung ich ein wenig...
  4. Vorletzer Parameter aus einer variablen Anzahl von Parametern

    Vorletzer Parameter aus einer variablen Anzahl von Parametern: Mein Shellskript soll je nachdem mit unterschiedlich vielen Parametern aufgerufen werden (also mal 5, mal 6, mal 7 etc.). Nun würde ich unabhängig...
  5. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...