我正在使用awk脚本做一些相当重的解析,这可能对将来重复有用但我不确定我的unix不友好的同事是否愿意安装awk / gawk以便做解析。有没有办法从我的脚本创建一个自包含的可执行文件?
答案 0 :(得分:1)
据我所知,在Cygwin Toolkit中有一个独立的awk.exe。
您可以将其与您分发给同事的任何文件捆绑在一起。
答案 1 :(得分:1)
我不知道使用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链来匹配模式。
答案 2 :(得分:0)
它必须是自包含的吗?您可以编写一个小的可执行文件,它将使用正确的参数调用awk并将结果传递给用户选择的文件或stdout - 适用于您的同事。
答案 3 :(得分:0)
GnuWin32中的MAWK - http://gnuwin32.sourceforge.net/packages/mawk.htm
另一个有趣的替代方案,Java实现 - http://sourceforge.net/projects/jawk/