[SOLVED]BASH: Liste bearbeiten, jeder Zeile eine "Kapitelmarke"voranstellen

  • Hallöchen


    Ich bastel hier an einem Script... und komme seit heut Mittag nicht mehr weiter... Ich kann nichtmal mein Problem richtig erklären :( Vielleicht könnt ihr mir helfen.


    Mein Problem:


    Ich starte ein "cat testdatei"...der Output ist Folgendermaßen(Beispielhaft):


    24
    a
    b
    c
    25
    a
    b
    26
    .
    .



    Die Liste soll so umgebaut werden, daß sie so aussieht...
    das quasi jeder buchstabe weiß, zu welcher Gruppe er gehört ... ;D


    24
    24a
    24b
    24c
    25a
    25b
    .
    .
    .


    Ein Tip wär echt cool...


    Thanxx


    MfG


    Crue

  • Du nimmst Dir eine Variable namens $KAPITEL. Lies jede Zeile Deiner Datei ein. Wenn $ZEILE eine Zahl ist, setze $KAPITEL = $ZEILE. Ansonsten schreibe $KAPITEL + $ZEILE in die Ausgabe.


    Wie wärs damit? ;)

    Hardware: AMD Duron 900 MHz, 256 MB Ram, 1 x 400 GB und 2 x 200 GB Maxtor, 1 x 500 GB USB 2.0, Nec DVD-RW ND-3500AG, 1 x TT 1.6 FF DVB-S, 1 x Twinhan Budget DVB-T
    Software: VDR 1.4.1, BigPatch, DMH-DVD-Archive-Patch, Kernel 2.6.12
    ---
    "Hörma, wie heißt nomma dat Instrument mit den 3 Knöppen oben drauf...? - Ja richtig, Flöte!"

  • Hmm... vielleicht die Richtung?


    Code
    outln=""
    cat datei | while read inln; do 
      echo $inln | grep -q "[0-9]"
      if [ $? -eq 0 ]; then 
        echo $outln
        outln="$inln"
      else 
        outln="$outln$inln" 
      fi 
    done


    dmh:
    Dann kannst mir als Scriptexperte gleich mal sagen wie ich bei o.a. Script erreiche dass outln ausserhalb der while Schleife auch noch bekannt ist ;)

  • EDIT: Hmm, zu langsam, aber die Lösungen sehen sowieso ziemlich gleich aus... :)

    VDR1: Gigabyte GA-M720-US3 (nVidia Corporation MCP78S [GeForce 8200]), Athlon II X2 240, 2GB RAM, Intel 82574L Gigabit, Debian Squeeze, Kernel 2.6.38.3 mit linux-media.tar.bz2 vom 20.04. 10:04, dvbhddevice fb6b1beedb72, VDR-1.7.22 (extension-Patch, 15 Plugins), epgsearch, extrecmenu, ...
    VDR2: Debian Etch, 2.6.21.3, K6-2 400, 192MB, NFS-Root, 466GiB über NFS, 1xNexus 2.1, 1xNova S, VDR-1.4.7
    Server: Debian Squeeze, 2.6.35.7, AMD X2 240e, 4GB, System: Raid1 2x500GB, Aufnahmen: Raid5 4TB + 1x 500GB, 1000MBit LAN
    Episodenlisten für epgsearch, VDRSeriesTimer

    Einmal editiert, zuletzt von vejoun ()

  • Einen hätte ich auch noch :)


    Code
    NUM=""
    while read line ; do
      if [ -z "${line//[0-9]/}" ] ; then
        NUM=${line}
      else
        echo -n "${NUM}"
      fi
      echo "${line}"
    done < datei


    Ohne grep 8) und durch "while ... done < datei" statt "cat datei | while ..." kann man innerhalb der Schleife auch Variablen setzen, die außerhalb der Schleife weiter existieren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!