Anzeige:
Ergebnis 1 bis 10 von 10

Thema: +++ awk +++ awk +++ awk +++

  1. #1
    Gast

    Post +++ awk +++ awk +++ awk +++

    ihr braucht keine angst zu haben zu antworten, ich kann eh nicht beurteilen, ob das richtig ist.

    kennt sich jemand mit awk aus? moechte 2schleifen durch eine datei "schicken"(verschachtelt). scheitere an der syntax. kann ich bestimmte textmuster in einer variablen zwischenspeichern, um sie in der inneren schleife ausgeben zu koennen? habe versucht, ueber die zeilennummer das zu programmieren, die fehlermeldungen reissen aber nicht ab.

    franky--;-)

  2. #2
    Senior Mitglied
    Registriert seit
    23.08.1999
    Beiträge
    132

    Cool

    Beschreib das Problem mal genauer, vielleicht kann ich dir dann einen 4 Zeiler in Perl schreiben!

    --------------------------------------------
    ...in the beginning it's only
    extraordinarily fantastic, fa-
    scinating, flexible, fast, easy,
    efficient, extensible without an
    end, highly portable, but if you
    are able to do more...
    --------------------------------------------


    [Dieser Beitrag wurde von mightymike99 am 24. Oktober 2000 editiert.]

  3. #3
    Gast

    Post

    hi mike,

    ...manchmal muss es eben awk sein. mit perl kann ich gegenwaeritig nichts anfangen. ich schau erst nochmal auf thommys linuxfibel, und dann melde ich mich noch mal.

    vorerst vielen dank!

    franky--;-)

  4. #4
    Senior Mitglied
    Registriert seit
    23.08.1999
    Beiträge
    132

    Cool

    Hi Franky,

    auch wenn das Problem sicher schon gelöst ist, perl ist nicht schwer. Ich hab mir ein gutes Buch von Oreilly gekauft(Perl Einführung) und dann hat ich nach ca. 10 Tagen die basics drauf das ich dein Problem wenn ich's denn genauer kennen wuerde loesen koennte.

    Bye
    Tobias

  5. #5
    Gast

    Talking

    hi thommy,

    vielen dank. Problem geloest. Sogar die numerische abfrage haut hin.

    all the best

    Franky--;-)

  6. #6
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Post

    Hi Franky,

    poste doch mal die Lösung - interessiert vielleicht auch andere

    (...und das awk-Kapitel steht nun in der Rohfassung; ich werde es nur noch um zahlreiche Beispiele erweitern)

    Thomas

  7. #7
    Gast

    Post

    hallo thommy, du hast mich "ueberzeugt"
    hier also das script ...


    #!/bin/csh
    #
    # datei: freitag13v1
    # das script erhaelt 2 jahreszahlen als eingabeparameter und gibt die tage aus, die auf freitag, den 13. fallen
    #02.10.2000 - fr
    #
    # pruefung, ob argumentanzahl 2 ist
    #
    while ( $#argv != 2 )
    if ( $#argv <= 0 ) then
    echo {$0}: aufruf ohne argumente! bitte 2 jahreszahlen eingeben!
    exit
    else if ( $#argv < 2 ) then
    echo {$0}: zu wenig argumente! bitte 2 jahreszahlen eingeben!
    exit
    else
    echo {$0}: zu viel
    argumente! bitte 2 jahreszahlen eingeben! exit
    endif
    endif
    end

    # pruefung, ob argumente numerisch sind
    #
    if ( ($argv[1] !~ [0-9][0-9][0-9][0-9]*) &#0124;&#0124;
    ($argv[2] !~ [0-9][0-9][0-9][0-9]*) ) then echo {$0}: keine Buchstaben! bitte nur ziffern eingeben!
    exit
    endif

    # pruefung, ob erste zahl kleiner als
    zweite
    #
    @ yanfang = $1
    @ yende = $2
    if ( $yanfang >= $yende ) then
    echo "erste zahl bitte kleiner als zweite!" exit
    endif

    # berechnung freitag 13.
    #
    echo ""
    echo "anzahl der freitage, die auf den 13. fallen von $1 bis $2"
    echo ""

    while ( $yanfang <= $yende )
    @ i = 1
    while ( $i <= 12 )
    cal $i $yanfang > start
    awk '{ if (NR==1) {monat=$1; jahr=$2} if ($6 == 13) printf "%2d%2s%-10s%4s\n", $6, ". ", monat, jahr}' start
    @ i++
    end
    @ yanfang += 1
    end
    rm start exit

    ist vielleicht umstaendlich, fuehrt aber auch nach rom.

    die abfrage, ob numerisch, scheint mir "gewaltig" zu sein, aber anders habe ich es nicht hingekriegt.
    auch gehe ich den weg ueber die erstellung einer datei start, um den kalender des jeweiligen monats einzulesen, da awk meines wissens aus dateien liest. ueber die folgen, falls im aktuellen verzeichnis eine datei namens start existiert ... bin ich mir voll bewusst. der loeschbefehl am ende entschuldigt doch alles ... ;-)

    Franky

  8. #8
    Senior Mitglied
    Registriert seit
    23.08.1999
    Beiträge
    132

    Post

    mein Vorschlag zum testen ob numerisch:
    Einfach mal was rechnen wenn ein Fehler kommt ist's wohl nicht numerisch!

    #!/bin/ksh
    expr 5 + $JAHR 2>/dev/null >/dev/null &#0124;&#0124; echo "Jahr ist keine Zahl!!!"

    Die (( ...)) Form zum rechnen in der ksh funktioniert nicht, da sie aus allem nicht-numerischen einfach 0 macht!

    Gruß Tobias

  9. #9
    Senior Mitglied
    Registriert seit
    23.08.1999
    Beiträge
    132

    Post

    -

    [Dieser Beitrag wurde von mightymike99 am 18. November 2000 editiert.]

  10. #10
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Thumbs up

    Die Überprüfung auf eine Ziffer geht gar noch einfacher:

    <pre>
    user&gt; echo "9919" | gawk '/^[[:digit:]]+$/ {print }'
    9919
    user&gt; echo "9919x" | gawk '/^[[:digit:]]+$/ {print }'
    # keine Ausgabe...
    </pre>

    Das Muster ist zu lesen als: "Die Zeichenkette muss mit einer Ziffer beginnen; ihr können beliebig viele Ziffern folgen und sonst nichts...".

    Thomas

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •