PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : +++ awk +++ awk +++ awk +++



17-10-2000, 21:29
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--;-)

mightymike99
24-10-2000, 21:05
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.]

25-10-2000, 22:10
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--;-)

mightymike99
04-11-2000, 20:51
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

15-11-2000, 21:01
hi thommy,

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

all the best

Franky--;-)

thommy
16-11-2000, 08:08
Hi Franky,

poste doch mal die Lösung - interessiert vielleicht auch andere http://www.linuxforen.de/ubb/wink.gif

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

Thomas

17-11-2000, 18:49
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

mightymike99
18-11-2000, 15:15
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

mightymike99
18-11-2000, 15:16
-

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

thommy
20-11-2000, 11:38
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