Zeile für Zeile an Textdatei anhängen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von abenstex, 02.12.2006.

  1. #1 abenstex, 02.12.2006
    abenstex

    abenstex Grünschnabel

    Dabei seit:
    06.09.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo zusammen,

    ich weiss nicht, ob das was ich will so einfach zu bewerkstelligen ist oder nicht. Ich frag jetzt aber trotzdem mal:
    Ich habe 23 Textdateien mit einer Größe von ca. 200MB pro Datei. Die Struktur der Datei ist ungefähr so:
    ID Spalte1 Spalte2 Spalte3 ... Spalte40000
    Jetzt möchte ich alle Dateien in einer Datei kombinieren, dazu muss ich immer jeweils eine Zeile der Datei X an das Ende der entsprechenden Zeile in der Datei Y anhängen. Allerdings müssen dann natürlich auch die IDs übereinstimmen. D.h. dass ich die Zeile aus der Datei X nur an die Zeile der Datei Y anhängen kann wenn die IDs in eben jener Zeile übereinstimmen. Alle Dateien beinhalten zwar die gleichen IDs und auch die gleiche Anzahl von IDs allerdings nicht zwangsläufig in derselben Reihenfolge.

    Also, ich bin über jeden Vorschlag froh!
    Danke
    Chris
     
  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 x-lette, 02.12.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    Verstehe ich das richtig:
    Datei 1
    1 lalala
    2 lalala
    5 lalala
    3 lalala
    4 lalala

    Datei 2
    2 lululu
    3 lululu
    5 lululu
    1 lululu
    4 lululu

    Und dann soll so etwas rauskommen:
    1 lalala 1 lululu
    2 lalala 2 lululu
    5 lalala 3 lululu
    3 lalala 4 lululu
    4 lalala 5 lululu

    Auf Shell-Ebene stell ich mir das schwierig vor.
    Perl käme eventuell in Frage, allerdings bei mehreren hundert Megabyte kostet das einiges an Performance!

    Wenn möglich solltest du stattdessen mit sortierten Dateien arbeiten, dann können die Dateien Zeile für Zeile abgearbeitet werden.

    Erstmal ein 'sort' auf alle Dateien und dann mit einer verschachtelten Schleife durch die Dateien gehen und die Zeilen aneinander hängen. Dazu gibt es 'join'.
    Kurzes Beispiel:
    Code:
    for FILE in <Dateiliste> ; do
      sort $FILE > $FILE.sorted
    done
    for FILE in <sortierte-Dateiliste-ohne-erste-Datei> ; do
      join <erste-sortierte-Datei> $FILE
    done
    
    Eine Lektüre von 'man join' oder zumindest 'join --help' ist sinnvoll!

    Viel Erfolg!
    XL
     
  4. #3 root1992, 02.12.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    ich glaube cut kann sowas auch. Ansonsten, ist das ein kleines C/C++ Prog.
     
  5. #4 abenstex, 02.12.2006
    abenstex

    abenstex Grünschnabel

    Dabei seit:
    06.09.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Eigentlich sollte nur lulu ans 1 lala angehängt werden, sprich die IDs nicht doppelt anhängen. Werd mir aber auf jeden Fall mal join anschauen. Geht da vielleicht was mit awk? Kenn mich allerdings mit awk überhaupt nicht aus.
     
  6. #5 x-lette, 02.12.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    'join' kann auch Felder eliminieren, das ist also kein Problem. Ansonsten gibt es noch 'cut'. Wäre dann eben eine pipe dazu. Aber das ist wirklich das geringste Problem bei deinen Monsterdateien :rolleyes:

    AWK kann so etwas sicher auch, allerdings wäre das m.E. nur dann eine Option, wenn die Dateien unsortiert bleiben sollen.
    Falls die Reihenfolge wichtig sein sollte, könnte man auch ein Konstrukt der folgenden Art ersinnen:
    • nummeriere die Zeilen durch
    • sortiere nach der ID
    • füge zusammen
    • sortiere nach der anfangs eingefügten Nummer und entferne diese
    :devil:

    Mir ist noch ein Fehler meines ersten Postings aufgefallen:
    Im Beispiel der aneinandergehängten Zeilen müssen die IDs natürlich korrekt übereinstimmen.
    Da habe ich wohl etwas schludrig zusammenkopiert. :(
     
Thema:

Zeile für Zeile an Textdatei anhängen

Die Seite wird geladen...

Zeile für Zeile an Textdatei anhängen - Ähnliche Themen

  1. Zeichen an Zeilenanfang für bestimmten Zeilenbereich einfügen

    Zeichen an Zeilenanfang für bestimmten Zeilenbereich einfügen: Hallo, ich würde gerne in einem Textdokument, z.B. von Zeile 10 - 18, an den Zeilenanfang ein # einfügen. Habe mir schon diverse Seiten zu SED...
  2. for schleife für eine Zeile

    for schleife für eine Zeile: Hallo, ich bin neu hier in diesem Forum. Evtl. kann mir ja einer von euch bei meinem Problem helfen. Ich möchte für ein entpackprogramm eine...
  3. Zeile für Zeile auslesen und Befehl ausführen

    Zeile für Zeile auslesen und Befehl ausführen: Hallo Zusammen Ich habe folgendes Problem: Ich möchte eine Datei zeilenweise auslesen und jede Zeile als Pattern für grep verwenden. Die...
  4. gute usenetclient für kommandozeile und mit webinterface

    gute usenetclient für kommandozeile und mit webinterface: Hallo, kennt jamand nen guten usenet client (ich hab debian lenny) der mehrere server beherrscht, ein webinterface bietet und auch aus der...
  5. Mp3 Player für die Kommando Zeile

    Mp3 Player für die Kommando Zeile: Hallo ich suchte verzweifelt in Google nach einen Player mit mp3 und ogg plugin für die Kommando Zeile da ich keine grafische Oberfläche habe um...