2009-04-20 13 views
1

Ich benutze ein awk Skript, um einige ziemlich schwere Parsing zu machen, die in der Zukunft nützlich sein könnten, aber ich bin mir nicht sicher, ob mein Unix- unfreundliche Mitarbeiter werden bereit sein, awk/gawk zu installieren, um das Parsing durchzuführen. Gibt es eine Möglichkeit, eine eigenständige ausführbare Datei aus meinem Skript zu erstellen?Wer weiß, wie man ein in sich geschlossenes Awk/Gawk Programm unter Windows macht

+0

verteilen Sie gawk.exe zusammen mit Ihrem Skript. – ghostdog74

Antwort

1

Ich bin einer Art und Weise nicht bewusst, eine in sich geschlossene binär mit AWK zu machen. Wenn Ihnen jedoch AWK gefällt, scheinen die Chancen gut, dass Ihnen Python gefällt, und es gibt mehrere Möglichkeiten, ein eigenständiges Python-Programm zu erstellen. 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 verwenden). Python hat nichts implizit wie die

/pattern_goes_here/ { 
    # code goes here 
} 

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

+0

Übrigens habe ich in der Vergangenheit viele AWK-Programme geschrieben, aber heutzutage bevorzuge ich Python. AWK gewinnt, wenn Sie nur einen schnellen Spaltenextraktor in der Shell entfernen wollen, aber Python gewinnt, wenn Sie etwas nichttriviales tun wollen. – steveha

0

Muss es in sich geschlossen sein? Sie könnten eine kleine ausführbare Datei schreiben, die awk mit den richtigen Argumenten aufruft und die Ergebnisse an eine Datei weiterleitet, die der Benutzer wählt, oder an stdout - je nachdem, was für Ihre Mitarbeiter geeignet ist.

1

Theres eine unabhängige awk.exe im Cygwin Toolkit, soweit ich weiß.

Sie könnten das einfach mit den Dateien, die Sie an Ihre Kollegen verteilen, einbinden.

+2

Wenn es ein Teil von Cygwin ist, dann ist es nicht wirklich eigenständig, oder? Ich würde stattdessen den von http://unxutils.sourceforge.net/ verwenden. –