-
+++ 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--;-)
-
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.]
-
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--;-)
-
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
-
hi thommy,
vielen dank. Problem geloest. Sogar die numerische abfrage haut hin.
all the best
Franky--;-)
-
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
-
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]*) ||
($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
-
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 || 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
-
-
[Dieser Beitrag wurde von mightymike99 am 18. November 2000 editiert.]
-
Die Überprüfung auf eine Ziffer geht gar noch einfacher:
<pre>
user> echo "9919" | gawk '/^[[:digit:]]+$/ {print }'
9919
user> 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
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen