Кто-нибудь знает, как сделать автономную программу Awk/Gawk для Windows.

Я использую awk-скрипт для достаточно тяжелого синтаксического анализа, который может быть полезно повторить в будущем, но я не уверен, что мои недружественные к unix коллеги захотят установить awk/gawk для выполнения синтаксического анализа. . Есть ли способ создать автономный исполняемый файл из моего скрипта?


person wwilkins    schedule 20.04.2009    source источник
comment
распространяйте gawk.exe вместе со своим скриптом.   -  person ghostdog74    schedule 24.10.2009


Ответы (4)


Я не знаю, как сделать автономный двоичный файл с помощью AWK. Однако, если вам нравится AWK, велики шансы, что вам может понравиться Python, и есть несколько способов сделать автономную программу на Python. Например, Py2Exe.

Вот быстрый пример 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

Не то же самое, что AWK, но его легко освоить, и он даже более мощный, чем AWK (у этого языка больше возможностей, и есть много «модулей», которые можно импортировать и использовать). Python не имеет ничего неявного, как

/pattern_goes_here/ {
    # code goes here
}

в AWK, но вы можете просто иметь цепочку if/elif/elif/else с соответствующими шаблонами.

person steveha    schedule 14.10.2009
comment
Кстати, в прошлом я написал много программ на AWK, но сейчас предпочитаю Python. AWK выигрывает, если вы просто хотите запустить быстрый экстрактор столбцов в оболочке, но Python выигрывает, если вы хотите сделать что-то нетривиальное. - person steveha; 14.10.2009

Насколько я знаю, в Cygwin Toolkit есть отдельный awk.exe.

Вы можете просто связать это с любыми файлами, которые вы распространяете среди своих коллег.

person Eoin Campbell    schedule 20.04.2009
comment
Если это часть Cygwin, то не совсем автономно, не так ли? Вместо этого я бы использовал файл с unxutils.sourceforge.net. - person Rob Kennedy; 20.04.2009

Должен ли он быть самодостаточным? Вы можете написать небольшой исполняемый файл, который будет вызывать awk с правильными аргументами и направлять результаты в файл, выбранный пользователями, или в стандартный вывод — в зависимости от того, что подходит вашим коллегам.

person Ori Pessach    schedule 20.04.2009

MAWK в GnuWin32 http://gnuwin32.sourceforge.net/packages/mawk.htm

также интересная альтернатива, реализация Java http://sourceforge.net/projects/jawk/

person vartec    schedule 20.04.2009