Я использую awk-скрипт для достаточно тяжелого синтаксического анализа, который может быть полезно повторить в будущем, но я не уверен, что мои недружественные к unix коллеги захотят установить awk/gawk для выполнения синтаксического анализа. . Есть ли способ создать автономный исполняемый файл из моего скрипта?
Кто-нибудь знает, как сделать автономную программу Awk/Gawk для Windows.
Ответы (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 с соответствующими шаблонами.
Насколько я знаю, в Cygwin Toolkit есть отдельный awk.exe.
Вы можете просто связать это с любыми файлами, которые вы распространяете среди своих коллег.
Должен ли он быть самодостаточным? Вы можете написать небольшой исполняемый файл, который будет вызывать awk с правильными аргументами и направлять результаты в файл, выбранный пользователями, или в стандартный вывод — в зависимости от того, что подходит вашим коллегам.
MAWK в GnuWin32 http://gnuwin32.sourceforge.net/packages/mawk.htm
также интересная альтернатива, реализация Java http://sourceforge.net/projects/jawk/