Eine Datei stückweise auslesen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von elyps, 12.01.2010.

  1. elyps

    elyps Jungspund

    Dabei seit:
    20.10.2004
    Beiträge:
    12
    Zustimmungen:
    0
    Liebe Forenteilnehmer,

    ich scheine gerade auf dem Schlauch zu stehen und frage deshalb nach einem Tipp von Euch.

    Ich möchte eine Datei mit ewig vielen Zahlenwerten stückweise auslesen. Genauer gesagt soll beispielsweise mein Skript (beginnend ab der der 11. Zeile) jeweils 20 Zeilen dieser Datei auslesen und dann wegschreiben. Dies klappt soweit auch ganz gut mit dem knappen Befehl

    sed -n '11,+20 p' matrix.txt > xy1.txt

    In die zweite Datei (xy2.txt) sollen dann die folgenden 21 Zeilen der Datei matrix.txt geschrieben werden. Diese ganze Prozedur (Auslesen und Wegschreiben) soll wiederum 21 mal geschehen. Ich habe einiges ausprobiert, aber ich seh anscheinend den Wald vor lauter Bäumen nicht. Kann man mit sed eventuell einen Index hochlaufen lassen?

    Hat einer von Euch einen kurzen Tipp?

    Vielen Dank!
     
  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 daboss, 12.01.2010
    Zuletzt bearbeitet: 12.01.2010
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Du kannst das ja in einer for-Schleife laufen lassen:
    (Zum Beispiel einmal die jeweils 20 Zeilen in xy1, dann die jeweils anderen 20 Zeilen in xy2. Die 120 musst halt entsprechend hoch setzen. Getestet ist's allerdings nicht)
    Code:
    for (( I=11; $I <= 120; I=I+40 ))
    do
            sed -n '$I,+20 p' matrix.txt >> xy1.txt
    done;
    for (( I=21; $I <= 120; I=I+40 ))
    do
            sed -n '$I,+20 p' matrix.txt >> xy2.txt
    done;
    
    oder so.
     
  4. elyps

    elyps Jungspund

    Dabei seit:
    20.10.2004
    Beiträge:
    12
    Zustimmungen:
    0
    Vielen Dank für die schnelle Antwort. Leider führt dies nicht ganz zum Ziel. Wenn ich dies ausführe:

    Code:
    #!/bin/bash
    
    for (( i=11; $i <= 120; i=i+40 ))
    do
            sed -n '$i,+20 p' matrix.txt >> xy1.txt
    done;
    for (( i=21; $i <= 120; i=i+40 ))
    do
            sed -n '$i,+20 p' matrix.txt >> xy2.txt
    done;
    
    werden zwei Dateien angelegt (xy1 und xy2), die jeweils folgenden Inhalt haben:
    Code:
    ,+20 p
    ,+20 p
    ,+20 p
    
    Diese Probleme mit einem laufenden Index hatte ich auch schon mehrfach und verzweifle noch daran ;-)

    Ein weiteres Problem, welches ich ungenau beschrieben habe: Das Skript soll für jede 21 Zeilen (11-21, 22-42, 43-63, ...) eine Datei xy mit fortlaufender Nummerierung anlegen. Ich müsste also irgendwie einen weiteren Index integrieren, der hochgezählt wird. Leider kriege ich nicht einmal den einen zum Laufen...
     
  5. #4 daboss, 12.01.2010
    Zuletzt bearbeitet: 12.01.2010
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Hm, ok, dann sollte jetzt aber

    Code:
    #!/bin/bash
    
    INDEX=1;
    for (( I=11; $I <= 451; I=I+21,++INDEX ));
    do
    	sed -n "$I,+20 p" matrix.txt > xy$INDEX.txt;
    done;
    
    Zumindest bekomme ich jetzt daraus aus einer matrix.txt 21 xy....txt-Dateien á 20 (fortlaufende) Zeilen. (11-31, 32-52, ...)
     
  6. #5 bytepool, 12.01.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    Zwei kleine Anmerkungen dazu noch:

    1. Durchgaengig gross geschriebene Variablen werden im Allgemeinen fuer Konstanten oder Umgebungsvariablen verwendet.
    Normale Variablen wuerde ich deswegen immer klein schreiben, um Verwechslungen zu vermeiden.

    2. Wenn eine Variable in einen Text eingebettet werden soll, z.B. xy$index.txt, empfiehlt es sich der Eindeutigkeit halber die ${} schreibweise zu benutzen, also z.B. xy${index}.txt.
    Dann ist klar was genau der Variablenname ist.

    mfg,
    bytepool
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    Code:
    man split
     
  9. elyps

    elyps Jungspund

    Dabei seit:
    20.10.2004
    Beiträge:
    12
    Zustimmungen:
    0
    Vielen Dank, es hat geklappt! Ihr seid super!

    Durch eine Kombination von sed und split klappt es schnell und reibungslos:
    Code:
    sed -n '11,451 p' matrix.txt >> matrix-output.txt
    split -l 21 matrix-output.txt
    
    Jetzt habe ich zwar ein weiteres Problem, aber ich eröffne lieber einen neuen Thread dafür, sonst gibts wohl Ärger mit den Moderatoren.
     
Thema:

Eine Datei stückweise auslesen

Die Seite wird geladen...

Eine Datei stückweise auslesen - Ähnliche Themen

  1. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  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. SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird

    SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird: Hallo Ich bin andauernd Opfer einer Brute Force Attacke. Die IPs die fehlerhafte Logins produzieren werden nach dem 3ten Versuch gesperrt. Aber...
  4. Linux AIO: Populäre Distributionen auf einer ISO-Datei

    Linux AIO: Populäre Distributionen auf einer ISO-Datei: Das Projekt Linux AIO stellt verschiedene populäre Linux-Distributionen auf ISO-Dateien mit jeweils verschiedenen Desktops zusammen. Alle Systeme...
  5. Script zur Korrektur einer E-Book Datei

    Script zur Korrektur einer E-Book Datei: Hallo, wie der Titel schon sagt, suche ich ein Script (sed?) für eine E-Book Datei. In dieser kommen immer wieder "-" vor innerhalb von Worten, wo...