Datei Inhalt sortieren!

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von legeti, 19.10.2006.

  1. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe ein Problem.:think: Ich will den Inhalt einer Textdatei sortieren. Die Datei ist wie folgt aufgebaut.

    1. Zeile: ABC1 ABC2 ABC3 ..... (als header, Spaltenzeichnung)
    ...Zeile: 1 4
    3 4
    4 3
    1 3
    3 1
    (Trennzeichen nicht Leerzeichen zwischen den Spalten)

    Nun sollen doppelte Einträge gelöscht werden. Die Gleichheit hängt von der ersten Spalte ab. Wenn zB. 2 Zeilen mit 1 anfangen, soll nur die weiter unten in der Datei stehende Zeile in der Datei bleiben.

    Das Ergebnis des oberen Beispiels wäre also:

    ABC1 ABC2
    1 3
    3 1
    4 3

    Meine Überlegung ist es den "sort" Befehl zubenutzen. Zusätzlich mit der Option -u (unqi) nun muss aber auch definiert werden das nur nach der ersten Spalte sortiert wird! Wie geht das?? -k1,1 oder wie??? Wahrscheinlich müsste die Liste noch umgedreht werden, da doch sonst der erste Eintrag gelöscht würde oder??

    Ich hoffe ihr habt mein Anliegen verstanden:think:

    Hoffe auf euer Unterstützung:hilfe2: !

    Grüße
    Legeti
     
  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. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Vielleicht ist meine Denkweise umstaendlich, aber ich wuerde, zum Beispiel mit awk, jeder Zeile (als erste Spalte) ihre Zeilennummer hinzufuegen, dann mit sort nach der zweiten und ersten Zeile sortieren und mit -u jeweils nur die oberste davon ausgeben lassen. Die Zeilennummer bekommst Du dann auch wieder mit awk weg. Hab's nicht ausprobiert, musst wahrscheinlich mit den Optionen ein wenig noch rumspielen.
     
  4. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    müsste aber doch auch alleine mit der 1. Spalte gehen. Wenn man sie umdreht und sortiert steht die fählt doch die richtige zeile weg? oder?? Aber wie sortiert man nach der ersten Spalte??? Gibt es noch andere Möglichkeiten??

    Ich muss beachten, das die Files sehr groß sind und der Server nicht noch mehere Optionen am besten durchführen sollte. Wie am Ende die Zeilen stehen ist egal!
     
  5. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Code:
    sort -r -k1 dateiname | sort -n -k1 -u
    
    funktioniert bei mir, d.h., mit '-k1' wird nach der ersten Zeile sortiert. '-n' ist wichtig, damit '-u' funktioniert. Der erste Aufruf dreht die Datei um, der 2 laesst nur das (dann) erste Vorkomme jeder 1. Spalte ueber.
     
  6. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    problem??

    HI,

    habe das mal eben ausprobiert.

    Datei
    BAN ID TEST
    1 2 2
    2 2 2
    3 2 3
    1 2 1
    3 3 3

    Das müsste das Ergebnis sein:
    BAN ID TEST
    1 2 1
    2 2 2
    3 3 3

    Es kommt das aber raus:
    BAN ID TEST
    1 2 2 <-falsch
    2 2 2
    3 3 3

    Komisch bei der 3 geht es!
    Hängt das mit dem Header zusammen??
     
  7. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    kleines update:

    Datei:
    1 5 2
    2 4 3
    3 3 1
    4 2 5
    5 1 4
    1 5 7
    2 a 3
    1 5 8

    Ergebnis: ok!
    $ sort -r -k1 test.txt | sort -n -k1 -u
    1 5 8
    2 a 3
    3 3 1
    4 2 5
    5 1 4

    wenn ich in der Datei in der letzten Zeile in der dritten Spalte die 8 durch eine 0 ersetze also:
    1 5 2
    2 4 3
    3 3 1
    4 2 5
    5 1 4
    1 5 7
    2 a 3
    1 5 0<-

    Ergebnis:
    $ sort -r -k1 test.txt | sort -n -k1 -u
    1 5 7<- falsch!!! es müsste 1 5 0 sein!!
    2 a 3
    3 3 1
    4 2 5
    5 1 4

    Ich sortiere doch garnicht nach der 3 Spalte!! Warum bringt das sort durcheinander???? Dazu kommt, das auch mal gar kein Wert stehen kann
    1 5 2
    2 4 3
    3 1
    4 2 5
    5 1
    1 5 7
    2 3
    1 5 0

    Hoffe es findet jemand eine Antwort!
     
  8. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    kleines update:

    Datei:
    1 5 2
    2 4 3
    3 3 1
    4 2 5
    5 1 4
    1 5 7
    2 a 3
    1 5 8

    Ergebnis: ok!
    $ sort -r -k1 test.txt | sort -n -k1 -u
    1 5 8
    2 a 3
    3 3 1
    4 2 5
    5 1 4

    wenn ich in der Datei in der letzten Zeile in der dritten Spalte die 8 durch eine 0 ersetze also:
    1 5 2
    2 4 3
    3 3 1
    4 2 5
    5 1 4
    1 5 7
    2 a 3
    1 5 0<-

    Ergebnis:
    $ sort -r -k1 test.txt | sort -n -k1 -u
    1 5 7<- falsch!!! es müsste 1 5 0 sein!!
    2 a 3
    3 3 1
    4 2 5
    5 1 4

    Ich sortiere doch garnicht nach der 3 Spalte!! Warum bringt das sort durcheinander???? Dazu kommt, das auch mal gar kein Wert stehen kann
    1 5 2
    2 4 3
    3 3
    4 2 5
    5 1 4
    1 5 7
    2 a 3
    1 5
    Ergebnis:
    $ sort -r -k1 test.txt | sort -n -k1 -u
    1 5 7 <- falsch: richtig wäre: 1 5
    2 a 3
    3 3
    4 2 5
    5 1 4


    Das Ergebnis ist das ebenfalls falsch!! also 0="" =!=!=:hilfe2:

    Hoffe es findet jemand eine Antwort!
     
  9. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    tac ist das Programm, das ich gesucht und erst nicht gefunden hatte. Es gibt die Datei Zeilenweise vom Ende an wieder. Damit klappten zumindest die Ausnahmefaelle, die Du in Deinem letzten Beitrag erwaehnst:
    Code:
    tac test.text | sort -u -n -k1
    
    Ich hoffe, damit klapt es. 'sort -r...' war wohl nicht der richtige Ersatz dafuer.
     
  10. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    Moin,

    sieht besser aus. Jetzt besteht wohl das Problem das nach der letzten Zeile ein Zeilenumbruch kommen muss da sonst die Ausgabe so aussieht:

    Datei:
    1 1 1
    2 2 2
    3 3 3
    1 0 0
    1 1 1 <-kein enter

    Ausgabe:
    $ tac sort.txt | sort -u -n -k1
    1 1 11 0 0
    2 2 2
    3 3 3

    Kennst du einen "einfache" Lösung!

    Aber schonmal vielen DanK!
     
  11. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Tut mir leid, doch bei mir tritt das Problem nicht auf. Was fuer ein System benutzt Du?
    Code:
    tg@nachtigaller:~$ tac --version
    tac (coreutils) 5.2.1
    tg@nachtigaller:~$ sort --version
    sort (coreutils) 5.2.1
    
    Auf Debian Etch i386
     
  12. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    Hi,

    Code:
    $ tac --version
    tac (GNU coreutils) 5.97
    Code:
    $ sort --version
    sort (GNU coreutils) 5.97
    auf Cygwin 2.510.2.2 (bash)

    Es soll hinterher auf einer HP-UX Büchse laufen
     
  13. #12 Wolfgang, 20.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Sorry für den Hinweis: Aber Cygwin ist nicht bash!
    Deshalb solltest du dir für dein Skript eine echte POSIX-conforme Umgebung suchen. Die GNU Utils werden dort wohl auch kaum verfügbar sein.

    Einigermaßen portabel wäre es da zum Beispiel gleich Perl zu verwenden.

    Gruß Wolfgang
     
  14. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    HI,

    danke für den Hinweis!

    Wie würde das den in Perl aussehen??

    Gruß
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 flappinski, 20.10.2006
    flappinski

    flappinski Foren As

    Dabei seit:
    31.03.2006
    Beiträge:
    87
    Zustimmungen:
    0
    was haltet ihr von
    sort -u +0 -1
    sortiert nur nach dem ersten Feld und bezieht -u auch nur auf dieses. Das natürlich nach dem Umdrehen der Datei. Bei mir macht -k1 nach dem ersten Feld nicht halt. Oder sehe ich da was falsch?
     
  17. legeti

    legeti Jungspund

    Dabei seit:
    19.10.2006
    Beiträge:
    23
    Zustimmungen:
    0
    Hallo,

    würde glaub ich auch funken! aber ich habe kein tac um die Datei umzudrehen!!! Wie kann ich das den ohne tac????

    HELP!!!!!
     
Thema: Datei Inhalt sortieren!
Besucher kamen mit folgenden Suchen
  1. unix dateiinhalt nach datum sortieren

    ,
  2. linux dateiinhalt sortieren

    ,
  3. linux txt inhalt sortieren

    ,
  4. inhalt textdatei sortieren
Die Seite wird geladen...

Datei Inhalt sortieren! - Ähnliche Themen

  1. Dateiinhalte vergleichen - Neue Sätze dann ausgeben

    Dateiinhalte vergleichen - Neue Sätze dann ausgeben: Liebe Forumsmitglieder, ich benöte mal wieder Eure Hilfe: Ich möchte 2 Dateien vergleichen. Datei-1 hat z.B. 100 Datensätze mit mehreren Feldern...
  2. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...
  3. Dateiinhalt mit Tabs wie Original an andere Datei anhängen

    Dateiinhalt mit Tabs wie Original an andere Datei anhängen: hallo, ich habe eine Datei mit diesem Inhalt: 0 0 12 -3.616 4.788 0 0.000...
  4. Ordnerinhalt als Textdatei - ls packt alles hintereinander

    Ordnerinhalt als Textdatei - ls packt alles hintereinander: Hallo, ich nutze Openelec (eine stark abgespeckte Linux-Version) auf meinem Mediacenter-PC. Um auch unterwegs einen Überblick über meine...
  5. 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...