Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

Diskutiere Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen... im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...

  1. Ulli01

    Ulli01 Grünschnabel

    Dabei seit:
    01.09.2005
    Beiträge:
    6
    Zustimmungen:
    0
    Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und bei doppelten Einträgen eine der beiden Zeilen komplett gelöscht werden soll.
    Die Ausgabe kann nach "stdout" erfolgen. Ich habe nur sed, uniq und grep zur Verfügung (Busybox).

    Ausgangsdatei:
    "Wort1 Wort2 Wort3 ab hier ist es egal1 "
    "Wort1 Wort2 Wort3 ab hier ist es egal2"
    "Wort1 Wort2 Wort4 ab hier ist es egalx"

    stdout sollte dann so aussehen:
    "Wort1 Wort2 Wort3 ab hier ist es egal1"
    "Wort1 Wort2 Wort4 ab hier ist es egalx"

    Wie lautet die Syntax dafür? Der Hacken an der Geschichte ist, dass ich die Zeilen nicht einfach bis zum 3. Leerzeichen abschneiden darf.

    Gruß Ulli01
     
  2. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.160
    Zustimmungen:
    15
    Hacken kannst Du im Garten.

    Was sagt denn man sort und man uniq zu der Thematik? Wie ist Dein aktueller Ansatz?
     
  3. #3 Ulli01, 15.11.2016
    Zuletzt bearbeitet: 15.11.2016
    Ulli01

    Ulli01 Grünschnabel

    Dabei seit:
    01.09.2005
    Beiträge:
    6
    Zustimmungen:
    0
    Ich habe noch überhaupt keinen Plan wie ich die Suche nach dem 3. Leerzeichen pro Zeile stoppen kann. Derzeit habe ich nur komplett doppelte Zeilen entfernt und dann den Inhalt der Ausgabe weiter verarbeitet. Zur Optimierung des Ergebnisses wollte ich mein Script um diese Funktion erweitern. Im Moment leite ich die Ausgaben noch in separate Dateien zur Fehlerkontrolle, später soll alles über stdin und stdout laufen. Nicht wundern über den Zusammenbau der URL, die beinhaltet immer das aktuelle Datum.

    Ich stelle das Script mal hier rein:
    Code:
    #!/bin/sh
    echo "Wechsel nach /tmp"
    cd /tmp
    echo "Datum ermitteln und URL zusammenbauen"
    d=http://www.Domain.com/`date +%Y-%m-%d`
    echo "Datei holen und ablegen"
    wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5" $d -O lines.txt, --output-document=/tmp/lines.txt
    echo "Loesche alte Datei suche strings und gib sie aus"
    rm /tmp/linesoutput.txt
    grep '^<br>C:' /tmp/lines.txt >> /tmp/linesoutput.txt
    echo "Ueberfluessige Zeichen entfernen (<br>)"
    grep -o "C:.*"  /tmp/linesoutput.txt  >  /tmp/linesoutput1.txt
    echo "Doppelte Eintraege entfernen"
    sort linesoutput1.txt | uniq > linesoutput2.txt
    echo "Neueste Eintragungen nach oben stellen"
    sed '1!G;h;$!d' /tmp/linesoutput2.txt > /tmp/linesoutput3.txt
    --------------------------> Hier soll die Optimierung eingebaut werden  <----------------------------------------------
    echo "Datei auf 30 Zeilen kürzen"
    sed -n '1,30p' < /tmp/linesoutput3.txt > /tmp/linesoutput4.txt
    echo "Loesche alle alten Zeilen in /etc/Lines.cfg"
    sed '/^C:/d' /etc/Lines.cfg > /tmp/Lines.txt
    sed '/^N:/d' /tmp/Lines.txt > /tmp/Lines.cfg
    echo "Schreibe Lines.cfg neu"
    mv /tmp/Lines.cfg /etc/Lines.cfg
    echo "Fuege neue strings ein"
    cat /tmp/linesoutput4.txt >> /etc/Lines.cfg
    echo "fertig"
    exit 0
    [code]
    Wenn ich die Suche bis zum 3. Leerzeichen begrenzen kann bekomme ich den Rest selbst gebacken. Danke schon einmal das sich hier meines Problems angenommen wird.
    Ein Gedankengang wäre, die komplette Datei zu kopieren alles nach dem 3. Leerzeichen zu entfernen und danach den Inhalt der doppelten Zeilen zu löschen. Jetzt die Zeilen incl. der leeren Zeilen in beiden Dateien zu nummerieren (es sind max. 99 Zeilen) und nun in der originalen Datei die Zeilen zu löschen, welche in der bearbeiteten Datei nur eine Nummerierung enthält. Das sollte eigentlich funktionieren, übersteigt aber im Moment meinen Horizont, wie ich das auf die Originaldatei (linesoutput3.txt) anwenden kann.
    
    Gruß Ulli01
     
  4. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.160
    Zustimmungen:
    15
    Wie üblich gibt's viele Möglichkeiten. Am einfachsten wäre vermutlich einer der folgenden Ansätze:
    * man sort - Da gibt's einen Parameter, der sagt, auf welchen Spalten denn die Sortierung stattfinden soll - damit wird der Rest ignoriert (beim Sortieren)
    * zieh' Dir die ersten 3 Spalten raus in eine sep. Datei (man cut), entferne daraus die doppelten Einträge (uniq, sort, je nach Lust und Laune) und nimm diese Datei dann als Pattern-Liste für grep in Verbindung mit "nur ersten Match ausgeben"
    * Assoziative Arrays

    ... mehr lässt sich sicherlich noch finden, wenn man denn weiß, was das denn überhaupt soll und wie konkret die Daten aussehen. Abgesehen davon - so wichtig kann ja alles nach der 3. Spalte nicht sein, wenn es für die Ausgabe egal ist. Warum also das mitschleppen und nicht einfach wegwerfen?
     
  5. Ulli01

    Ulli01 Grünschnabel

    Dabei seit:
    01.09.2005
    Beiträge:
    6
    Zustimmungen:
    0
    Vielen Dank für den Hinweis zum Lösungsansatz, ich werde mich mal durchkämpfen.

    Ulli01
     
  6. #6 Programmer78, 17.11.2016
    Programmer78

    Programmer78 Doppel-As

    Dabei seit:
    28.11.2007
    Beiträge:
    110
    Zustimmungen:
    2
    Hallo Ulli, bezüglich "nach Suchmuster suchen" kann man mit grep dann auch Zeilennummern ausgeben lassen. Diese könnte man mit "cut" ebenfalls rausfiltern und dann sed direkt anweisen, betreffende Zeile zu löschen. So habe ich das mal gemacht. Meine Lösungen sind hier aber meist zu umständlich gedacht ; )
     
Thema: Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...
Besucher kamen mit folgenden Suchen
  1. txt datei doppelte wörter linux

    ,
  2. doppelte wort einträge textdatei

Die Seite wird geladen...

Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen... - Ähnliche Themen

  1. Suche Dateinpfad in .txt

    Suche Dateinpfad in .txt: Hallo, mein Problem ist folgendes: Ich habe Textdatein in denen zwei für mich relevante Dinge stehen. Zum einen die Zeile: Enabled:...
  2. nach einem wort in einer textdatei suchen

    nach einem wort in einer textdatei suchen: halloooo ihr lieben, ich hoffe ihr könnt mir weiterhelfen :) ich lernen momentan die skriptsprache shell und alles was dazu gehört. ich soll...
  3. Nach Inhalt in Dateien suchen und den String aus Datei löschen

    Nach Inhalt in Dateien suchen und den String aus Datei löschen: Hallo alle miteinander, ich bin auf der Suche nach einer Möglichkeit nach Dateien mit einem bestimmten Inhalt zu suchen. Wenn der String in der...
  4. Datei nach dem nahest liegendem Wert durchsuchen.

    Datei nach dem nahest liegendem Wert durchsuchen.: Hallo, ich will in einer Datei nach einem Wert suchen. Das Problem ist, dass der Wert nicht identisch sein muss. Gibt es eine möglichkeit einen...
  5. mittels if abfrage datei nach variabelnwert durchsuchen

    mittels if abfrage datei nach variabelnwert durchsuchen: Hallo Leute, ich möchte mittels shell-skript den korrekten aufbau einer ssh verbindung testen. Ich habe die aktuelle IP mit welcher die...