Login
Newsletter
Werbung

Thema: GNU awk 4.0 veröffentlicht

18 Kommentar(e) || Alle anzeigen ||  RSS || Kommentieren
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
0
Von zongo am So, 3. Juli 2011 um 18:02 #

bevor jetzt die ersten schreiben "veraltet, braucht man nicht mehr, XYZ ist besser" .... zur listenverarbeitung gibt es kaum etwas besseres wenn man schnell zum ziel kommen will(im sinne von schnell meine ich die schnelle entwicklung eines tools zur verabeitung). es freut mich, das die sprache noch "lebt" und weiterhin um sinnvolles(BEGINFILE, ENDFILE) ergänzt wird.

  • 0
    Von Falko am So, 3. Juli 2011 um 19:59 #

    Ich schließe mich dem an. Mit awk lassen sich viele Sachen wirklich flugs lösen. Dank an die Entwickler.

    0
    Von Anonymous am Mo, 4. Juli 2011 um 02:58 #

    zur listenverarbeitung gibt es kaum etwas besseres
    Ja genau, deswegen hat gawk auch erst in diesem Release grundlegendste Features wie schachtelbare Arrays bekommen.

    Aber zum Thema: Veraltet, braucht man nicht mehr, Perl ist besser. perl -anE kann alles, was awk kann und noch viel, viel mehr. Wetten, dass es euch nicht gelingt, ein Beispiel für irgendetwas zu finden, das in awk deutlich besser geht als in Perl?

0
Von Also am So, 3. Juli 2011 um 20:07 #

gawk ist super, nur muß ich es so selten nutzen, daß ich alles wieder vergessen habe, wenn ich es mal brauche.


Es wurde Code für viele alte, nicht mehr unterstützte Plattformen (z.B. Atari, Amiga, BeOS, MS-DOS, MS-Windows, SunOS 3.x, ...) entfernt
Und was ist mit Haiku?

0
Von Lexi am So, 3. Juli 2011 um 22:25 #

GAWK ist toll, nur frage ich mich, warum man eine bestimmte Sache schlecht oder gar nicht dokumentiert hat: GAWK schaut - wahrscheinlich als einzige Programmiersprache - in die Systemeinstellungen nach dem Dezimaltrennzeichen. Als Deutscher mit deutschen Einstellungen ist das höchst relevant und wenn man das nicht weiß, interpretiert GAWK Strings mit Dezimalpunkt falsch.

  • 0
    Von grmpf am Mo, 4. Juli 2011 um 00:43 #

    Ja, das ist wirklich suboptimal... ich habe eh LC_NUMERIC auf Englisch gestellt, aber in Scripts sollte man das immer manuell davor schreiben. Es wäre schön, wenn das in awk geändert würde!

    1
    Von Anonymous am Mo, 4. Juli 2011 um 02:53 #

    GAWK schaut - wahrscheinlich als einzige Programmiersprache - in die Systemeinstellungen nach dem Dezimaltrennzeichen.
    Das kann so ziemlich jede Programmiersprache.
    In C: setlocale(LC_ALL, "");
    in Perl: use locale;
    in C++: std::cin.imbue(std::locale(""));
    Awk macht es halt standardmäßig so. Was besser ist, ist wohl Ansichtssache. Ich würde stark vermuten, dass zahlreiche C-Bibliotheken Bugs aufweisen, wenn sie nicht in der C-Locale laufen.

    Dieser Beitrag wurde 1 mal editiert. Zuletzt am 04. Jul 2011 um 02:54.
    • 1
      Von Lexi am Di, 5. Juli 2011 um 20:59 #

      Haben Sie meinen Beitrag überhaupt gelesen? Sieht nicht so aus. Es geht nicht um das Können. Es geht darum, dass GAWK Zahlen wie 3.14 falsch einliest, wenn die Systemeinstellung auf das Komma eingestellt ist. Und genau dieses Verhalten ist nicht dokumentiert und man erwartet es auch nicht von einer Programmiersprache(!). Das Standardverhalten von Perl ist wahrscheinlich ein anderes. Das von Python ist anders. Wenn man Python eine Zahl als String übergibt, schaut Python auch nicht in die Systemeinstellungen. Füttert man Gnuplot mit Daten, nimmt Gnuplot auch den Dezimalpunkt, egal was in der Systemeinstellung steht. Textausgaben aller prominenten Programmiersprachen (Python, Java, C, C++, Ruby usw. usf.) schreiben Zahlen mit Dezimalpunkt und niemals mit Komma.

      Und was besser ist, ist gerade nicht Ansichtssache. Immer diese Phrasen... Das ist wie "Über Geschmack lässt sich nicht streiten." - Damit erstickt man jede Diskussion im Keim und es wird gähnend langweilig.

      (G)AWK wird von Programmierern benutzt. Programmierer erwarten es, dass eine Programmiersprache den Dezimalpunkt verwendet, genauso wie Autofahrer erwarten, dass das Bremspedal links vom Gaspedal ist. Als ich während meiner Diplomarbeit Statistiken ausgewertet habe (mithilfe von GAWK), ist mir die Sache mit den Dezimaltrennzeichen anfangs gar nicht aufgefallen. Wenn aus Zahlen wie 134.23 eine 134 wird und AWK aus hunderten solcher Werte einen Mittelwert bildet, dann fällt das nicht auf. Werden die Zahlen kleiner, gewinnt der Nachkommaanteil an Gewicht und dann fällt es auf. Es hat bestimmt drei Wochen gebraucht, bis mir der Fehler aufgefallen ist.

      Und das allerschlimmste es: Die Sache ist nicht(!) dokumentiert. Ich habe das Handbuch durchgestöbert und nix gefunden, ob man vielleicht dem AWK per Option sagen kann, was das Dezimaltrennzeichen ist. Irgendwann kam ich dann mal auf den Trichter, dass GAWK in die Systemeinstellungen schaut und das war dann auch die Lösung. Und selbst wenn es dokumentiert wäre, wäre das nur wenig besser. Um zurückzukommen auf mein Beispiel mit dem Auto und dem Bremspedal: Ein solches Auto würde nie zugelassen, auch wenn im Handbuch steht, dass das Bremspedal rechts sei. Beim Auto ist es lebenswichtig, dass man in einer Gefahrsituation schnell reagiert und da zählt das Gewohnte. AWK und ein bisschen Statistik ist jetzt nicht lebenswichtig, aber der Anwender soll damit gut klarkommen können. Sowas nennt man Ergonomie.

      Ich weiß nicht, ob Sie jetzt ein Mann oder eine Frau sind. Ziehen Sie sich mal eine Jacke des anderen Geschlechts an und machen Sie die Knöpfe zu. Da können Sie an sich beobachten, wie wichtig der gewohnte Ablauf ist und ein eingeübter Handgriff ist. Ich selbst hatte vor ein paar Wochen eine Frauenjacke an, weil es spät war, kalt wurde und ich keine Jacke dabei hatte. Ich habe für das Schließen der Knöpfe drei- bis viermal so viel Zeit benötigt als ich es von meinen Jacken oder Mänteln her kenne.

      Dieser Beitrag wurde 1 mal editiert. Zuletzt am 05. Jul 2011 um 23:16.
      • 0
        Von ThorstenS am Di, 5. Juli 2011 um 21:49 #

        Ich kann echt gut nachvollziehen was du damit meinst. Mir war das noch nichtmal bewußt und nutze schon drei-vier mal die Woche awk.

        /thorsten

        1
        Von finger am Di, 5. Juli 2011 um 22:22 #

        Ich bin mir nicht sicher, ob Du gut genug gesucht hast.

        POSIX awk:

        A string value shall be converted to a numeric value by the equivalent of the following calls to functions defined by the ISO C standard:

        setlocale(LC_NUMERIC, "");
        numeric_value = atof(string_value);

        sowie

        LC_NUMERIC

        Determine the radix character used when interpreting numeric input, performing conversions between numeric and string values, and formatting numeric output. Regardless of locale, the period character (the decimal-point character of the POSIX locale) is the decimal-point character recognized in processing awk programs (including assignments in command line arguments).

        POSIX erwartet also, dass man LC_NUMERIC respektiert.. ausser im Falle von awk und ich kann das in zwei von drei awks reproduzieren:


        $ echo 0.1 0.1 | LC_ALL=en_US.UTF-8 gawk '{print $1+$2}'
        0.2
        $ echo 0.1 0.1 | LC_ALL=de_DE.UTF-8 gawk '{print $1+$2}'
        0.2

        $ echo 0.1 0.1 | LC_ALL=en_US.UTF-8 nawk '{print $1+$2}'
        0.2
        $ echo 0.1 0.1 | LC_ALL=de_DE.UTF-8 nawk '{print $1+$2}'
        0

        $ echo 0.1 0.1 | LC_ALL=de_DE.UTF-8 mawk '{print $1+$2}'
        0.2
        $ echo 0.1 0.1 | LC_ALL=en_US.UTF-8 mawk '{print $1+$2}'
        0.2

        $ echo 0.1 0.1 | LC_ALL=en_US.UTF-8 gawk --use-lc-numeric '{print $1+$2}'
        0.2
        $ echo 0,1 0,1 | LC_ALL=en_US.UTF-8 gawk --use-lc-numeric '{print $1+$2}'
        0

        $ echo 0.1 0.1 | LC_ALL=de_DE.UTF-8 gawk --use-lc-numeric '{print $1+$2}'
        0
        $ echo 0,1 0,1 | LC_ALL=de_DE.UTF-8 gawk --use-lc-numeric '{print $1+$2}'
        0,2

        Bei nawk scheints ein Bug zu sein, welcher unterdessen Behoben sein sollte:

        http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=42320


        Überprüfe also, welches awk du wie verwendest.


        p.s.

        $ gawk --version
        GNU Awk 3.1.8
        Copyright (C) 1989, 1991-2010 Free Software Foundation.

        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program. If not, see http://www.gnu.org/licenses/.

0
Von der Muger am Mo, 4. Juli 2011 um 12:19 #

Neu im Handel: LINUX ultra aktiv...
http://dermuger.blogspot.com/

liebe Grüsse vom Muger

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung