awk ' match($1,$suchkriterium) will nicht klappen?!

  • Hi!


    Ich möchte mein shoutcast2vdr script erweitern, aber irgendwie komm ich seit 2 h nicht weiter.
    Ich müsste in einem Text nach $suchkriterium suchen können und den text von da an ausgeben.
    Die folgenden 2 Zeilen wollen aber nicht funktionieren, irgendwie akzeptiert mir awk die variable $suchkriterium nicht, sie nimmt nicht den Inhalt an, die sie eignetlich hat.


    Code
    x=x+1
    suchkriterium="File"$x"="
    cat $tempdata | awk ' match($1,$suchkriterium) { print $0 }' \
    			| sed 's/$suchkriterium//' > $tempdata.temp


    ohne verwendung von $suchkriterium als Variable klappt es!

    Code
    cat $tempdata | awk ' match($1,"File1=) { print $0 }' \
    			| sed 's/"File1="//' > $tempdata.temp


    Habe gelesen, dass man im awk keine Variabeln benutzen kann oder so ähnlich (ist alles noch komplex für mich).
    Ja aber wie macht man das denn ?
    Hat jemand bitte einen Tip für mich ? Wahrscheinlich such ich sonst noch den ganzen Tag lang (vor allem weiss ich nichtmal, nach was ich genau suchen soll) ?(

    Software: Ubuntu 10.04 - VDR 1.7.14 + Xineliboutput (VDPAU) + XBMC
    Hardware: NEXUS-S - SkyStar2 - Nova-S2 - Nividia 8600GT

  • Danke für die rasche Antwort Viking!


    Jetzt bin ich aber nicht ganz sicher, ob ich das richtig verstanden habe.


    Ich habe jetzt mal


    cat $tempdata | awk match($1,$suchkriterium) { print $0 }


    versucht, das geht aber auch nicht. Ich bin blutier anfänger und mache wohl einen krassen denkfehler.

    Software: Ubuntu 10.04 - VDR 1.7.14 + Xineliboutput (VDPAU) + XBMC
    Hardware: NEXUS-S - SkyStar2 - Nova-S2 - Nividia 8600GT

  • Nun bin ich sehr dicht dran, aber es klappt immer noch nicht ganz:



    cat $tempdata | awk 'match($1,'$suchkriterium') { print $0 }'


    gibt folgenden fehler...irgendwie stimmts immernoch nicht


    awk: Kommandozeile:1: match($1,File3=) { print $0 }
    awk: Kommandozeile:1: ^ parse error
    awk: Kommandozeile:1: Fatal: Unzulässige Argumentzahl 0 für match.

    Software: Ubuntu 10.04 - VDR 1.7.14 + Xineliboutput (VDPAU) + XBMC
    Hardware: NEXUS-S - SkyStar2 - Nova-S2 - Nividia 8600GT

  • Jo genau ;(


    dann hab ich gedacht, mach ich das eben so:

    Code
    cat $tempdata | awk 'match('$1','$suchkriterium') { print '$0' }'


    aber das ist auch nicht besser:


    Code
    awk: Kommandozeile:1: match(,File3=) { print ./shoutcast2vdr-0.0.7 }
    awk: Kommandozeile:1:       ^ parse error
    awk: Kommandozeile:1: match(,File3=) { print ./shoutcast2vdr-0.0.7 }
    awk: Kommandozeile:1:              ^ parse error
    awk: Kommandozeile:1: Fatal: Unzulässige Argumentzahl 0 für match.


    mein Gehirn bekommt gerade neue Windungen ich spür es förmlich :D

    Software: Ubuntu 10.04 - VDR 1.7.14 + Xineliboutput (VDPAU) + XBMC
    Hardware: NEXUS-S - SkyStar2 - Nova-S2 - Nividia 8600GT

  • Probier's mal so:


    Code
    cat $tempdata | awk 'match('$1',"'$suchkriterium'") { print '$0' }'


    (die doppelte Anführungszeichen um '$suchkriterium' sind neu.)


    Achim


    my VDR: Asus AT3IONT-I deluxe, Digital Devices Cine S2 (dual DVB-S2 V5.5), yavdr 0.4, VDR 1.7.21
    OSD-Calender: PIM Plugin

  • dank eurer Hilfe bin ich nun endlich drauf gekommen.


    mit

    Code
    cat $tempdata | awk 'match($1,"'"$suchkriterium"'") { print $0 }' \
    | sed 's/'"$suchkriterium"'//' > $tempdata.temp


    klappts nun.


    Vielen Dank

    Software: Ubuntu 10.04 - VDR 1.7.14 + Xineliboutput (VDPAU) + XBMC
    Hardware: NEXUS-S - SkyStar2 - Nova-S2 - Nividia 8600GT

  • Besser wär das:


    awk -v suchkriterium="$suchkriterium" \
    '$1 ~ suchkriterium { sub(suchkriterium, ""); print }' $tempdata > $tempdata.temp


    Sollte dem entsprechen, was Du machst: Alle Zeilen, in denen $suchkriterium im ersten (Whitespace-getrennten) Feld auftritt, werden ausgegeben, nachdem das erste Auftreten von $suchkriterium selbst entfernt wurde. Nur wird $suchkriterium beim Aufruf von awk an die gleichnamige awk-Variable übergeben und das Ersetzen schon in awk gemacht.


    Oder war's das nicht?
    Papa

    LinVDR-0.7 letzten MT-Patch SN45G Athlon-XP 1500+ 256M 60G Siemens-DVB-1.6 DVDRW

    Einmal editiert, zuletzt von Papa_59 ()

  • Papa_59


    Vielen Dank für den Tip, den werd ich gelegentlich noch ausprobieren.
    Denke schon, dass es auf das selbe herauskommt, war jedenfalls genau das, was ich ursprünglich mal wollte.
    Zwar läufts jetzt auch auf "meine" Art, dank den anderen hilfreichen Stimmen hier ;) aber so wie Du vorschägst ist es natürlich schon eleganter :)


    Gruss
    Unimatrix0

    Software: Ubuntu 10.04 - VDR 1.7.14 + Xineliboutput (VDPAU) + XBMC
    Hardware: NEXUS-S - SkyStar2 - Nova-S2 - Nividia 8600GT

Jetzt mitmachen!

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