"cut" vertikal ausführen bzw. vertikal auswerten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Blackcollar, 18.02.2007.

  1. #1 Blackcollar, 18.02.2007
    Zuletzt bearbeitet: 18.02.2007
    Blackcollar

    Blackcollar Grünschnabel

    Dabei seit:
    29.01.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Moin Leute,

    mit cut kann ich ja folgendes machen :
    Code:
    Dateiinhalt : asd | qwe | lew | qwe
    
    Mit dem Befehl cut -d"|" -f 1 gibt er mir dann ja asd aus. soweit alles klar.
    Nun habe ich aber eine Datei in der die Werte vertikal sind:

    Code:
    ####
    test lol
    mope asd
    rofl ass
    ####
    test lol2
    mope asd2
    rofl ass2
    ####
    test lol3
    mope asd3
    rofl ass3
    
    Nun brauche ich einen Befehl der ### als delimiter angibt und dann den Text drunter ausgibt. Dummerweise sind es nicht immer 3 Zeilen sonst würde ich mir aus tail und head etwas bauen.

    Weiß hier jemand rat ?

    gruß
    'collar
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Unter der Annahme dass nach dem letzten Eintrag nix mehr kommt funktioniert mein kleines zusammengebasteltes Script so ...
    lieber wäre es mir aber wenn es einen Befehl dazu gibt.
    von daher wer Ideen hat, als her damit ;)

    gruß
    'collar

    Code:
    file="menu.lst"
    grep="title"
    
    #
    q=0
    for i in `grep -n $grep $file | cut -d":" -f 1`
    do
            if [ $q != 0 ]
            then
                    cat $file | head -n $(( i - 1 )) | tail -n $(( i - q  ))
                    echo ""
            fi
            q=$i
    done
    x=`wc $file -l | cut -d" " -f1`
    cat $file | head -n $x | tail -n $(( x - q + 1 ))
    
     
  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. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich verstehe nicht so richtig, was Du bezwecken willst. Welches Ergebnis soll rauskommen?
     
  4. #3 neutrino1, 19.02.2007
    Zuletzt bearbeitet: 19.02.2007
    neutrino1

    neutrino1 Mitglied

    Dabei seit:
    03.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    Hallo!

    Ich nehme an, du willst z.B den 2.Textblock auslesen, oder?
    Einfache Befehle gibt's für sowas, so weit ich weiß, nicht.
    Wenn man noch so wie ich noch mit ksh88 auskommen muß (seufz), dann scheint mir das das einfachste zu sein:
    Code:
    > export I=0;cat 2.txt|while read LN;do
    > [[ $LN = "####" ]] && I=$(($I+1)) || MYARRAY[I]="${MYARRAY[I]}$LN\n"
    > done
    > echo ${MYARRAY[2]}
    test lol2
    mope asd2
    rofl ass2
    
    
    ein Nachteil: The value of all subscripts must be in the range of 0 through 1023. - also mehr als 1024 Textblöcke dürfte ich nicht befüllen wollen ...
     
  5. #4 Xanti, 20.02.2007
    Zuletzt bearbeitet: 20.02.2007
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wenn neutrino1 das Problem richtig verstanden hat, will ich hier meine Lösung nachreichen:

    Code:
    perl -ne 'BEGIN{$i=0} $i++ if s/^#.*//s; print if $i==2' menu.lst
    
    edit: Für eine Benutzung dieses Befehles in einem Shellskript geht

    Code:
    idx=2
    perl -ne "BEGIN{\$i=0} \$i++ if s/^#.*//s; print if \$i==$idx" menu.lst
    
     
  6. #5 angelsfall, 20.02.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Sorry for off-topic, but @Xanti: Könntest du mal dein Nutzen von BEGIN in diesem Zusammenhang erklären? Wäre ganz nett, danke. :)
     
  7. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wie BEGIN definiert ist, brauch ich Dir wahrscheinlich nicht erklären, da ich weiß, dass Du gute Quellen hast. ;)

    Die Option -n (auch -p) legen eine Schleife um das File menu.lst. Will heißen, dass Perl jede Zeile von menu.lst nimmt und darauf den in -e '...' definierten Code anwendet. Die Zeile steckt in $_, so wie in

    Code:
    open(FILEHANDLE, "<menu.lst")
    foreach(<FILEHANDLE>) {...}
    
    Damit $i unabhängig von diesem Code ist, also nicht bei jedem Aufruf initialisiert wird, muss $i ausserhalb initialisiert werden. Und dies geht mit BEGIN Block, INIT Block geht auch, weil dieser Block direkt nach der Kompilierung einmal ausgeführt wird.
     
  8. #7 angelsfall, 20.02.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Ah, danke. Das Flag -n war dann das, was ich nicht richtig (bzw. gar nicht ;)) gedeutet habe.
     
  9. #8 Wolfgang, 20.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Geht auch mit sed:

    Gruß Wolfgang
     
  10. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    @Wolfgang - Ähm, bei Dir kommt aber ein anderes Ergebnis raus. Wenn ich das richtig sehe, jeweils die zweite Zeile hinter jedem #####, während bei den anderen Lösungen die Einträge zwischen zweiter und dritter ##### augegeben wird. :think:

    Gruß, Daniel
     
  11. #10 Wolfgang, 20.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Ja, dann habe ich die Aufgabe falsch verstanden.

    Gruß Wolfgang
     
  12. Anzeige

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

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Das muss nicht sein. Ich ging von neutrino1s Interpretation aus. Und auf meine Anfrage in #2 ist der Thread-Ersteller noch nicht eingegangen.
     
  14. #12 Schlaubi_fi.de, 26.02.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    So wie ich das verstehe, will der Threadersteller als Ergebnis alle Zeilen ohne
    den ### haben, bleibt nur die Frage ob diese (meistens 3) Zeilen dann zu einer zusammengefasst werden sollen oder nicht....

    Ganz frech :D
    Code:
    tiger:~ schlaubi$ cat dummy 
    ####
    test lol
    mope asd
    rofl ass
    ####
    test lol2
    mope asd2
    rofl ass2
    ####
    test lol3
    mope asd3
    rofl ass3
    tiger:~ schlaubi$ grep -v "###" dummy 
    test lol
    mope asd
    rofl ass
    test lol2
    mope asd2
    rofl ass2
    test lol3
    mope asd3
    rofl ass3
    
     
Thema:

"cut" vertikal ausführen bzw. vertikal auswerten

Die Seite wird geladen...

"cut" vertikal ausführen bzw. vertikal auswerten - Ähnliche Themen

  1. Vertikales Scrolling mit der Maus in Java Anwendungen

    Vertikales Scrolling mit der Maus in Java Anwendungen: Horizontales Scrolling mit der Maus in Java Anwendungen Guten Abend, ich habe mir eine neue Maus gegönnt, welche auch horizontales Scrollen...
  2. [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

    [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen: Hallo, ich hoffe ihr könnt mir helfen. Ich entwerfe im Moment ein Skript, welches den Callmonitor (Telnet) auf meiner FritzBox abfragt und wenn...
  3. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...
  4. Skript bei Lubuntu nach jedem Start ausführen

    Skript bei Lubuntu nach jedem Start ausführen: Hallo, durch neue Hardware musste ich das OS (Lubuntu) neu installieren. Vorher hatte ich mal ein Autostart-Skript eingerichtet, das bei jedem...
  5. Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

    Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen: Hallo, für eine wissenschaftliche Arbeit beschäftige ich mich mit einem Embedded Linux Rechner, auf welchem ich eine meiner C-Datein zum laufen...