Aus pipeline in eine Datei schreiben mit und ohne Zeilenvorschub

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von L0rd, 16.06.2011.

  1. L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Hallo,

    also ich filtere mehrmals hintereinander aus einer Datei verschiedene Sachen heraus und schreibe sie dann in eine Datei namens tabelle mit ";" getrennt, damit ich das ganze dann in Excel auswerten kann.

    also so:

    Code:
    .....| sed -n '$p' | sed 's/\t//g' >> tebelle;
    .....| sed -n '$p' | sed 's/\t//g' >> tebelle;
    .....| sed -n '$p' | sed 's/\t//g' >> tebelle;
    
    
    wie mache ich das so dass die ersten Ergebnisse in gleiche Zeile hintereinander geschrieben werden und nur beim letzten mal einen Zeilenvorschub (\n) habe ?
    habe versucht "echo -ne" bzw "echo -e" einzubauen, leider ging es so nicht.

    Und eine zweite kleine Frage: wie baue ich nach jedem Wert ein Semikolon(ist mein Trennzeichen) ein ?

    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. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Hallo,
    wenn DU Deine Tabelle ohnehin in Teilschritten (also mehreren Kommandos) aufbaust, kannst Du doch nach den ersten Ergebnisse den Zeilenvorschub Deinen Wünschen entsprechend anpassen.
    Wenn Deine Tabelle bereits vorliegt und das Trennzeichen soll rein, kannst Du das doch sicher auch mit sed oder tr erledigen. Tausche Leerzeichen gegen Semikolon.
    Anders ist es sicher sehr schwierig, da Du Deine Tabelle ja nicht pro Wert, sondern pro Zeile erstellst.
    Übrigens kann man (je nach Betriebssystem und sed-Version) auch die sed-Befehle verbinden mit -e (statt immer wieder Pipe).

    Gruß zst
     
  4. #3 L0rd, 17.06.2011
    Zuletzt bearbeitet: 17.06.2011
    L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    Hier nochmal mein Code, um sed gehts hier nicht, ich zeige hier vereinfachtes Beispiel, es geht um Pipelines und wie man keine newline damit hinkriegt.
    Code:
    .....| sed ... | sed ... >> tebelle; # hier kein Zeilenvorschub
    .....| sed ... | sed ... >> tebelle; # hier kein Zeilenvorschub
    .....| sed ... | sed ... >> tebelle; # hier sollte Zeilenvorschub kommen
    
    momentan ist es so

    Code:
    wert11
    wert12
    wert13
    wert21
    wert22
    wert23
    ....
    
    soll aber so sein

    Code:
    wert11;wert12;wert13;
    wert21;wert22;wert23;
    wert31;wert32;wert33;
    
    In einem Wert kommen Leerstellen vor (ab und zu), aber nicht davor und nicht dahinter, deswegen muss einfach stur ein Semikolon am Ende des Werts angehängt werden - da gibt es keinen Zeichen den man durch Semikolon ersetzen kann.

    Ja und wie ? das war ja gerade meine Frage. Aus jeweils einer Pipeline kommt ein Wert angeflogen was mache ich ? :) wie schreibe ich es in Datei so hin wie ich es oben beschrieben habe ?

    Vielleicht habt ihr andere Vorschläge wie man aus einer Datei mehrere Sachen rausfiltern kann und die dann so hinspeichern wie ich es möchte. Ich habe es in mehereren Schritten gemacht weil es für mich so einfacher ist Überblick zu behalten.
    Mein Script ist klein und auf Perfomance kommt es mir nicht an.
     
  5. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Das ist mir bewusst, daher schrieb ich:
    "Wenn Deine Tabelle bereits vorliegt und das Trennzeichen soll rein, kannst Du das doch sicher auch mit sed oder tr erledigen."
    Wenn die Leerzeichen ungeeignet sind, kannst Du andere Zeichen austauschen.
    Du meinst:
    Doch, die Zeichen, die Du sicher nicht siehst oder beachtest: das LF-Zeichen.
    Das muss also VOR dieser Zeile geschehen: ".....| sed ... | sed ... >> tebelle; # hier sollte Zeilenvorschub kommen"
    Wenn ich Deinem Beispiel oben folge, dann würde ich dafür tr verwenden.
    Wenn bis dahin alle Werte in eine Zeile sollen, kannst Du ja die Datei "tebelle" bearbeiten und kannst auf Einzelaktionen nach jeder Pipe verzichten.
    Es gibt aber sicher auch eine andere, bessere, schnellere Lösung ... wie immer halt.
     
  6. #5 L0rd, 17.06.2011
    Zuletzt bearbeitet: 17.06.2011
    L0rd

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    ich habe über tr nachgedacht und hier eine "skizze":

    Code:
    
    .....| sed ... | sed ... | tr  LF ";" >> tebelle; # hier kein Zeilenvorschub
    .....| sed ... | sed ... | tr  LF ";"  >> tebelle; # hier kein Zeilenvorschub
    .....| sed ... | sed ... | tr  LF ";LF"  >> tebelle; # hier sollte Zeilenvorschub kommen
    
    
    Jetzt weiss nur noch nicht wie ich LF ins tr bringe, weil so "LF" sucht er nach Buchstabenfolge LF

    und ob das hier gehen wird ";LF" ...

    eine Idee ?
     
  7. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    So geht es bei mir (für die gesamte Datei):
    Code:
    cat DATEI | tr "\n" ";"
    
    Danach hängst Du noch ein "\n" für die neue Zeile an.
    Gruß zst
     
  8. Anzeige

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

    L0rd Mitglied

    Dabei seit:
    28.04.2006
    Beiträge:
    38
    Zustimmungen:
    0
    danke !
    wie mache ich das genau ? so tr "\n" ";\n" ?

    Die Frage ist auch, wird Semikolon angehängt wenn aus Pipeline nichts rauskommt ? (also wenn nichts gefunden wird) Wir ersetzen ja und wenn wirklich keine Zeichen in Pipeline sind, kommen da trotzdem "\n" raus ? (die wir dann durch ; ersetzen)
    Das ist ja dann eine leere Zelle in der Tabelle und es sollte sein.
     
  10. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Danach hängst Du noch ein "\n" für die neue Zeile an. Mit printf oder echo geht das.
     
Thema:

Aus pipeline in eine Datei schreiben mit und ohne Zeilenvorschub

Die Seite wird geladen...

Aus pipeline in eine Datei schreiben mit und ohne Zeilenvorschub - Ähnliche Themen

  1. Verkettung von Pipeline

    Verkettung von Pipeline: Hallo, ich habe eine Frage bezüglich Verkettung von Pipelines. Dazu ein Beispiel: (ls *bla || echo Fehler && exit) | nlWenn die Zeichenkette...
  2. ATI Pipeline Freischaltung auch für Linux?

    ATI Pipeline Freischaltung auch für Linux?: Hallo, ich bins wieder mal... Ihr alle kennt doch bestimmt die Geschichte das man durch manipulierte Treiber manche Modelle von ATI's...
  3. Wie kann ich x Zeichen hinter einem bestimmten Wort ausgeben ?

    Wie kann ich x Zeichen hinter einem bestimmten Wort ausgeben ?: In mehreren Dateien ist immer mehrfach ein bestimmtes Wort enthalten, gefolgt von einem "=". Ich möchte mir die dahinter folgenden 10 Zeichen...
  4. Keine Benachrichtigungen im Vollbild Modus

    Keine Benachrichtigungen im Vollbild Modus: Arch Linux Plasma 5.8 Weiss einer ob das gehen sollte, bzw kann mal einer testen ob es bei ihm geht, gerne auch mit anderen kde/plasma versionen....
  5. Kontextmenü mit einem Skript verbinden

    Kontextmenü mit einem Skript verbinden: Abend, wenn ich z. B. eine simple Umwandlung eines Bildformates in ein anderes über das KDE-Kontextmenü (Servicemenü nennt es sich im KDE oder...