1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Software und Anwendungen
  3. Betriebssysteme

Shell scripting - Komma einfügen [gelöst]

    • Linux
  • Almlieschen
  • 5. September 2011 um 14:09
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Almlieschen
    Punkte
    1.718
    Beiträge
    304
    • 5. September 2011 um 14:09
    • #1

    Ich beiße mir gerade die Zähne an einem wirklich banalen Problem aus, aber ich kann dazu nichts ergoogeln, weil alle nur das Gegenteil davon haben wollen.

    Mein Problem:
    Ich will eine Textdatei, die Zeilen wie

    Code
    Introduction/7,Black,notBold,notItalic,closed,TopLeftZoom,101,149,0.0

    zeilenweise einlesen, und dann die Zahl hinter dem Slash, im Beispiel also 7, um eins erhöhen (und das ganze wieder ausgeben/in eine Datei schreiben).

    Ich hab zuerst am / getrennt, dann an den Kommas, die Zahl ausgelesen, um eins erhöht, passt. Jedoch kann ich nicht (und das ist für mich gerade wirklich bitter....) wieder die Beistriche printen, also meine Ausgabe sieht so aus:

    Code
    Introduction/8   Black notBold notItalic closed TopLeftZoom 101 149 0.0

    Die Beistriche an den richtigen Stellen brauche ich aber, da sie auch im original Programm so sind. Mit find+replace kann ich das nicht sinnvoll nachbearbeiten, weil manchmal statt "introduction" zwei Worte durch ein Leerzeichen getrennt sind.

    Mein Code sieht folgendermaßen aus (mal ohne in eine Datei zu schreiben):

    Bash
    #!/bin/bash
    
    
    while read myline
    do
      IFS="/"
      set -- $myline
      output1="$1/"
    
    
      IFS=","
      set -- $2
      seite=$[$1+1]
      output2="${output1}$seite,$2,$3,$4,$5,$6,$7,$8,$9"
      echo $output2
    done < $1
    Alles anzeigen

    Und probiert habe ich es mit unterschiedlichen Hochkommas um die Beistriche, Escape von Beistrichen, was weiß ich. *gedemütigt-von-der-shell-bin*

    Btw., ich versuche mit Jpdfbookmarks meiner DA wieder ihren Index zu geben, nachdem ich die Titelseite aus der Fakultät-für-Informatik-Vorlage mit pdftk hinzugefügt habe. Dazu habe ich zuerst die Metadaten des originalpdfs extrahiert, will jetzt jede Seitenangabe um eins erhöhen (eine Titelseite = alles eine Seite weiter hinten), und das ganze dann wieder "dazupappen".
    Also wer eine einfachere Lösung für das hat, dem bin ich auch dankbar :)

    EDIT: Na eh klar, sobald man um Hilfe ruft löst man das Problem dann doch irgendwie selbst...die Shell hasst mich :/

    Hier der korrekte Quelltext, schon mit write out some file - Lösung ist, direkt echo zu nehmen, da das mit Kommas keine Probleme hat:

    Bash
    #!/bin/bash
    
    
    while read myline
    do
      IFS="/"
      set -- $myline
      output1="$1/"
    
    
      IFS=","
      set -- $2
      seite=$[$1+1]
      echo "${output1}$seite,$2,$3,$4,$5,$6,$7,$8,$9" >> output.txt
    done < $1
    Alles anzeigen

    2 Mal editiert, zuletzt von Almlieschen (5. September 2011 um 14:19) aus folgendem Grund: Gelöst

  • i>u
    Punkte
    31
    Beiträge
    6
    • 5. September 2011 um 14:50
    • #2
    Code
    perl -ne '/^([^\/]+\/)(\d+)(.+)$/ && print $1 . ($2+1) . $3 . "\n"' in.txt > out.txt


    ;)

  • Almlieschen
    Punkte
    1.718
    Beiträge
    304
    • 5. September 2011 um 14:58
    • #3

    Ist natürlich auch eine Lösung, mit der man sich aber sicher nicht so lange beschäftigen kann wie ich mich mit meinen Kommas :)
    Ja, perl ist schon cooler....sollte ich mir wirklich mal genauer ansehen....

  • Maximilian Rupp 27. Dezember 2024 um 00:09

    Hat das Thema aus dem Forum Betriebssysteme nach Betriebssysteme verschoben.

  1. Datenschutzerklärung
  2. Impressum