Pascal Schmidt: Wer kann mir bei einem Perl oder Bash Script helfen?

hallo,

ich bräuchte ein Script in Bash oder Perl geschrieben das folgendes macht:

aus einer datei "daten.txt" (kommaseparierte datei)
dateiinhalt:
1, Wert1, Zeichen2, ...
2, Wert3, Zeichen4, ...

soll jeweils drei zeichen nach dem ersten komma (also zb Wer) und die ersten drei zeichen nach dem zweiten komma (also zb Zei) in eine Variable (inhalt: 1, WerZei, Wert1, Zeichen2, ...)
gespeichert werden und die Zeile entsprechend in eine neue Datei "output.txt" abgespeichert.

kann mir jemand einen tipp geben womit das leichter geht (bash oder perl) und wie ich das anstelle?

Der ganze ablauf soll solange durchlaufen, bie die datei "daten.txt" abgearbeitet ist.

gruss

Pascal

  1. Hallo Pascal,

    ich bräuchte ein Script in Bash oder Perl geschrieben das folgendes macht:

    Ich empfehle Dir Perl, da Perl spezielle Funktionen für genau solche Probleme zur Verfügung stellt.

    aus einer datei "daten.txt" (kommaseparierte datei)

    Zum Öffnen einer Datei verwendet man

    open, siehe perldoc open,

    zum Schliessen

    close, siehe perldoc close

    dateiinhalt:
    1, Wert1, Zeichen2, ...

    Einlesen von Zeilen mit dem Zeileneingabeoperator <>.

    2, Wert3, Zeichen4, ...

    soll jeweils drei zeichen nach dem ersten komma (also zb Wer) und die ersten drei zeichen nach dem zweiten komma (also zb Zei) in eine Variable (inhalt: 1, WerZei, Wert1, Zeichen2, ...)

    Du könntest die Zeile mit

    split, siehe perldoc split

    an einem Trennzeichen in bequeme Häppchen zerteilen.

    substr, siehe perldoc substr

    wiederum kann Dir helfen, Teilstrings zu extrahieren,

    gespeichert werden und die Zeile entsprechend in eine neue Datei "output.txt" abgespeichert.

    print, siehe perldoc print

    kann eine Liste von Strings ausgeben, auch in eine Datei

    kann mir jemand einen tipp geben womit das leichter geht (bash oder perl) und wie ich das anstelle?

    Mit Perl.

    Der ganze ablauf soll solange durchlaufen, bie die datei "daten.txt" abgearbeitet ist.

    Selbstverständlich verfügt Perl über Schleifenkonstrukte. In Deinem Fall wäre

    while, siehe perldoc while

    angemessen.

    Freundliche Grüsse,

    Vinzenz

  2. Hallo,

    vielleicht hilft dir schon mal "man cut".

    Bert

    --
    E492: Not an editor command: Wq
    ln -s /dev/brain
    Selbst ist der Mann, wenn er sich verdoppeln kann
  3. Hi,

    ich bräuchte ein Script in Bash oder Perl geschrieben das folgendes macht:

    aus einer datei "daten.txt" (kommaseparierte datei)
    dateiinhalt:
    1, Wert1, Zeichen2, ...
    2, Wert3, Zeichen4, ...

    soll jeweils drei zeichen nach dem ersten komma (also zb Wer) und die ersten drei zeichen nach dem zweiten komma (also zb Zei) in eine Variable (inhalt: 1, WerZei, Wert1, Zeichen2, ...)

    Für CSV ist AWK meist am passendsten (hier: GNU-Awk):
    $ echo -e "1, Wert1, Zeichen2,\n2, Wert2, Zeichen2,foobar\n3, Wert3, Zeichen2,blub\n4, Wert4, Zeichen2,bla\n" | awk -F[,] '{printf "%4.4s%4.4s\n", $2,$3};'
     Wer Zei
     Wer Zei
     Wer Zei
     Wer Zei

    gespeichert werden und die Zeile entsprechend in eine neue Datei "output.txt" abgespeichert.

    Hups! ;-)
    Na dann:
    [...] awk -F[,] '{printf "%4.4s%4.4s\n", $2,$3};' > output.txt

    so short

    Christoph Zurnieden