Wer weiß, wie eine in sich geschlossene Awk / Gawk Programm unter Windows zu machen

StackOverflow https://stackoverflow.com/questions/768793

  •  12-09-2019
  •  | 
  •  

Frage

Ich bin mit einem awk-Skript einig ziemlich schweres Parsing zu tun, die nützlich sein könnten in Zukunft zu wiederholen, aber ich bin nicht sicher, ob meine Unix-unfreundlichen Mitarbeiter bereit sein werden, awk / gawk zu installieren, um zu tun das Parsen. Gibt es eine Möglichkeit, eine in sich geschlossene ausführbare Datei von meinem Skript zu erstellen?

War es hilfreich?

Lösung

Ich bin einer Art und Weise nicht bewusst mit AWK eine in sich geschlossene binär zu machen. wenn Sie AWK jedoch mögen, scheinen die Chancen gut, dass Sie Python vielleicht gefallen, und es gibt mehrere Möglichkeiten, eine in sich geschlossene Python-Programm zu machen. Zum Beispiel Py2exe .

Hier ist ein kurzes Beispiel von Python:

# comments are introduced by '#', same as AWK

import re  # make regular expressions available

import sys  # system stuff like args or stdin

# read from specified file, else read standard input
if len(sys.argv) == 2:
    f = open(sys.argv[1])
else:
    f = sys.stdin

# Compile some regular expressions to use later.
# You don't have to pre-compile, but it's more efficient.
pat0 = re.compile("regexp_pattern_goes_here")
pat1 = re.compile("some_other_regexp_here")

# for loop to read input lines.
# This assumes you want normal line separation.
# If you want lines split on some other character, you would
# have to split the input yourself (which isn't hard).
# I can't remember ever changing the line separator in my AWK code...
for line in f:
    FS = None  # default: split on whitespace
    # change FS to some other string to change field sep
    words = line.split(FS)

    if pat0.search(line):
        # handle the pat0 match case
    elif pat1.search(line):
        # handle the pat1 match case
    elif words[0].lower() == "the":
        # handle the case where the first word is "the"
    else:
        for word in words:
            # do something with words

Nicht das gleiche wie AWK, aber leicht zu erlernen, und tatsächlich mächtiger als AWK (die Sprache verfügt über mehr Features und es gibt viele „Module“ zu importieren und zu verwenden). Python hat nichts implizit wie die

/pattern_goes_here/ {
    # code goes here
}

im AWK, aber Sie können einfach eine if / elif / elif / else Kette mit Mustern müssen übereinstimmen.

Andere Tipps

Theres eine eigenständige awk.exe im Cygwin Toolkit soweit ich weiß.

Sie können nur das Bündel in mit dem, was Dateien, die Sie an Ihre Kollegen sind zu verteilen.

muss es selbst enthalten sein? Sie könnten eine kleine ausführbare Datei schreiben, die awk mit den richtigen Argumenten und Rohr die Ergebnisse in einer Datei aufrufen werden die Benutzer wählt, oder auf stdout -. Je nachdem, was für Ihre Mitarbeiter geeignet ist,

mawk in GnuWin32 - http://gnuwin32.sourceforge.net/packages/mawk.htm

auch interessante Alternative, Java-Implementierung - http://sourceforge.net/projects/jawk/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top