awk zeichenkette schneiden

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von grechos, 11.08.2006.

  1. #1 grechos, 11.08.2006
    grechos

    grechos Eroberer

    Dabei seit:
    12.05.2005
    Beiträge:
    54
    Zustimmungen:
    0
    moin an alle
    ich möchte gerne eine ZEichenkette mit dem awk teilen
    meine zeichenkette
    ist diese
    6311_Events_stored_in_Event_test
    ich würde nun mit awk gerne die ersten 4 zahlen aus dieser kette in eine Variable legen
    Ich kenn mich aber mit dem awk nicht so gut aus kann mir jemand helfen


    GRuß an alle die helfen wollen
     
  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
    Code:
    [~]$ echo 6311_Events_stored_in_Event_test | awk -F_ '{print $1}'
    6311
    
    Gruss, Xanti
     
  4. #3 grechos, 11.08.2006
    Zuletzt bearbeitet: 11.08.2006
    grechos

    grechos Eroberer

    Dabei seit:
    12.05.2005
    Beiträge:
    54
    Zustimmungen:
    0
    Hallo das war net schlecht
    aber ich habe es jetzt mal mit einer größeren kette probiert und ich kriege wieder meine grenzen gezeigt
    damit hab ich rumexperementiert

    ERROR;TrackIT.EventInboundQueue;19:21:20;11.08.2006;6610_Events_stored_in_Event_Inbound_Queue;19:21:20;11.08.2006 (20060811192128) TRACKIT MON-CLIENT


    von dieser kette wollte ich wieder die 6610 in eine VAriable speichern aber keine Chance

    weiß jemand noch einen RAT
     
  5. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Dann verkettest Du awk 2x hintereinander:
    echo Dein_langer_string | awk -F\; '{ print $5 }' | awk -F_ '{print $1}'
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Einfach zuerst bei ; trennen und anschliessend bei _

    edit: rikola war schneller
     
  7. #6 grechos, 11.08.2006
    Zuletzt bearbeitet: 11.08.2006
    grechos

    grechos Eroberer

    Dabei seit:
    12.05.2005
    Beiträge:
    54
    Zustimmungen:
    0
    ich probiers und sach euch bescheid
    ich glaube eher morgen
     
  8. #7 Wolfgang, 11.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Warum nimmst du nicht sed, das ist viel effizienter und braucht nur einen Prozess.
    Code:
    $ sed --version
    GNU sed Version 4.1.4
    $ cat daten
    ERROR;TrackIT.EventInboundQueue;19:21:20;11.08.200 6;6610_Events_stored_in_Event_Inbound_Queue;19:21: 20;11.08.2006 (20060811192128)TRACKIT MON-CLIENT
    $ VAR=$(sed -e 's/.*;\([[:digit:]]*\)_.*/\1/g' daten)
    $ echo $VAR
    [b]6610[/b]
    
    Eventuell ein
    Code:
    while read <daten; do
    VAR=$(sed -e 's/.*;\([[:digit:]]*\)_.*/\1/g' daten);
    echo $VAR;
    # weiteres
    done
    
    Gruß Wolfgang
     
  9. #8 MarcelWie, 18.08.2006
    MarcelWie

    MarcelWie Jungspund

    Dabei seit:
    18.08.2006
    Beiträge:
    17
    Zustimmungen:
    0
    Hallo,

    ich habe mal eine Kleine Frage.
    Ich habe eine Datei die folgendermaßen aussieht:

    Code:
    SERVICE,DASI,VNC Service,WinVNC: Stopped
    SERVICE,DASI,DNS Server,Stopped
    ...
    Wie ich das nun zerschneide ist mir klar (awk -F, '{print $1}'.
    Was ich aber nun möchte ist das er Jeden Wert in eine bestimmte Variable schreibt z.B. Service in $Wert1, DASI in $WERT2 usw. Muss ich dann in einem Shell Script mehrmals AWK aufrufen bis er alles bearbeitet hat, oder kann man das auch in einem Aufruf starten?
    Zudem müsste er nach dem abarbeiten der ersten Zeile diese löschen so das Zeile 2 an die Stelle von Zeile 1 rückt.
    Könnte mir jemand vllt den Aufruf erstellen? Am besten noch mit ner kleine Erklärung dann muss ich nicht andauernd fragen :D

    MfG

    Marcel
     
  10. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Hallo zusammen,

    um nicht immer gleich 'awk' zu bemühen, cut leistet beim Stringschnippeln auch ganz gute Dienste und die Syntax ist nicht ganz so komplex wie die von 'awk'.

    Gruss
    d22
     
  11. #10 Wolfgang, 18.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Verwende dazu einfach while read.
    Auch die Shell kennt einen Feldseperator, der in der Umgebungsvariable IFS zu finden und zu setzen ist.
    Code:
    $ IFS=,;
    $ cat testdatei|while read V1 V2 V3 V4;
     do
     echo "\$V1 hat den Wert $V1";
     echo "\$V2 hat den Wert $V2";
     done
    
    $V1 hat den Wert SERVICE
    $V2 hat den Wert DASI
    $V1 hat den Wert SERVICE
    $V2 hat den Wert DASI
    
    Wir setzen IFS auf ,
    Dann verfüttern wir die Ausgabe an die while read Schleife.
    read weist den Variablen V1 bis V4 die Werte zu.
    Gibt es mehr Werte als Variablen angegeben werden, steckt der Rest in der letzten Variable -> hier V4
    man read
    HTH
    Gruß Wolfgang
     
  12. #11 MarcelWie, 18.08.2006
    MarcelWie

    MarcelWie Jungspund

    Dabei seit:
    18.08.2006
    Beiträge:
    17
    Zustimmungen:
    0
    Danke Wolfgang für die Mühe aber sicher das Read mein Problem lösst?
    Weil das was du gepostet hattest bezieht sich ja auf alle Zeilen in der Datei. Es darf aber nur um die erste gehen. Zudem muss ja nach dem auslesen die 1. Zeile gelöscht werden und die folgenden müssen aufrücken.

    MfG

    Marcel
     
  13. #12 Wolfgang, 18.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Genau das passiert bei jeder Zeile.
    Statt echo kannst du natürlich deine Verarbeitung der Variablen einbinden.
    read liest solange die Daten ein und initialisiert die Variablen, bis das Ende der Datei erreicht wird.
    awk macht das auch nicht anders, ist aber langsamer dabei, und verbraucht einen zusätzlichen Prozess.

    Was willst du mit den Werten machen?
    Willst du die Datei selbst bearbeiten?

    Gruß Wolfgang
     
  14. #13 Wolfgang, 18.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Also nochmal: Wenn du die Datei nur um die erste Zeile kürzen willst, nachdem du die Daten nur aus der ersten Zeile verarbeitet hast...
    Code:
    IFS=,;head -n1 test|while read v1 v2 v3 v4; do echo "$v1 $v2 $v3 $v4"; sed -i -ne '1!p' datei; done
    Das liest die erste Zeile, speichert die Werte und löscht anschließend die erste Zeile mit GNU sed (Option -i)

    Solltest du kein GNU sed haben, dann musst du die Ausgabe in eine Temporäre Datei umleiten und anschließend umkopieren.
    sed -i -ne '1!p' datei >temp&& cat temp>datei&& rm -f temp;
    Hoffe das habe ich diesmal richtig verstanden.
    ;)
    Gruß Wolfgang
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 MarcelWie, 21.08.2006
    MarcelWie

    MarcelWie Jungspund

    Dabei seit:
    18.08.2006
    Beiträge:
    17
    Zustimmungen:
    0
    Perfekt so sollte es sein ;)
    Ich bedanke mich :D

    Aber eine Frage habe ich noch. Muss ich mein Script in diese While schleife einfügen. Oder gibt es auch ne Möglichkeit ohne diese Schleife.

    Wenn ich es so probiere:
    Code:
    IFS=,;
    head -n1 errors.msg|read v1 v2 v3 v4
    echo $v1
    funktioniert es natürlich nicht. Warum kann ich natürlich nicht sagen da meine Uinux Scripting Künste doch recht bescheiden sind ;)

    MfG

    Marcel
     
  17. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Vielleicht solltest Du einfach mal schreiben, was Du genau machen willst. Wo ist das Problem mit der while-Schleife? Die wird benötigt, damit jede Zeile bearbeitet wird. Ohne while-Schleife wird nur die erste Zeile bearbeitet.

    Gruss, Xanti
     
Thema: awk zeichenkette schneiden
Besucher kamen mit folgenden Suchen
  1. awk dateiname schneiden

    ,
  2. awk ein teilzei der Zeichenkette abschneiden

    ,
  3. unix zeilen kürzen

    ,
  4. awk variablen abschneiden,
  5. unix zeichenkette ausschneiden,
  6. awk string beschneiden,
  7. unix zeichenkette trennen,
  8. zeichen ausschneiden awk
Die Seite wird geladen...

awk zeichenkette schneiden - Ähnliche Themen

  1. Zeichenkette per Shellskript ausschneiden

    Zeichenkette per Shellskript ausschneiden: Hallo, habe folgendes Problem : Ich möchte Dateien in Unterordner verschieben, abhängig von einer Zeichenkette im Dateinamen. Beispiel:...
  2. Zeichenkette abschneiden

    Zeichenkette abschneiden: Hi Community, folgendes: Ich würde gerne Verzeichnisnamen umbenennen. Die Verzeichnisse werden automatisch erstellt, dynamisch benannt und enden...
  3. Zeichenkette per Skript an shell übergeben

    Zeichenkette per Skript an shell übergeben: [gelöst]Zeichenkette per Skript an shell übergeben Hallo Leute, sitze momentan etwas ratlos vor einem Shell-Skript (Bin kompletter Anfänger...
  4. Zeichenkette mit Nullen auffüllen

    Zeichenkette mit Nullen auffüllen: Hallo zusammen, ich möchte in einem text-file nach Zeichenketten weniger als 14Zeichen suchen und die jeweiligen Zeichenkette mit führenden...
  5. Zeichenkette umwandeln?

    Zeichenkette umwandeln?: Halli Hallo, habe mich bezüglich meines Problems schon schlau gemacht, jedoch hat bisher keine der Möglichkeiten bei mir Funktioniert. Also...