我已经在 bash / gawk 中编写了一个小程序,我打算在 mobaxterm 上本地运行。我的问题是,虽然它在一台PC上完美运行,但当我在另一台PC上试用时,它始终给我一个错误127。
#!/usr/bin/gawk -f
# Note: strings' 1st character is at column 1.
# Before first line.
BEGIN {
print "" >> JOB_OUT
print "GAwk Started" >> JOB_OUT
# Variables Init.
line_crnt= ""
line_writ= ""
#
load_indx= ""
srch_indx= ""
#
line_cnt_fltr= 0
line_cnt_base= 0
line_cnt_comn= 0
line_cnt_diff= 0
# We will use array:
# tbl_filter
}
# For each line of input.
# 1st File (filter).
# Load filter to table.
FNR==NR {
line_cnt_fltr+= 1
line_crnt= $0
load_indx= substr(line_crnt, p_fltr_srt, p_fltr_len)
# load_indx=line_crnt
tbl_filter[load_indx]+=1
next
}
# 2nd File (base).
# Read base, check filter, write output.
{
line_cnt_base+= 1
line_crnt= $0
srch_indx= substr(line_crnt, p_base_srt, p_base_len)
line_writ= line_crnt
if (srch_indx in tbl_filter)
{
print line_writ >> FILE_OT_COMN
line_cnt_comn+= 1
}
else
{
print line_writ >> FILE_OT_DIFF
line_cnt_diff+= 1
}
}
# After last line.
END {
print "" >> JOB_OUT
print "Read : line_cnt_fltr = @" line_cnt_fltr "@" >> JOB_OUT
print "Read : line_cnt_base = @" line_cnt_base "@" >> JOB_OUT
print "Same : line_cnt_comn = @" line_cnt_comn "@" >> JOB_OUT
print "Diff : line_cnt_diff = @" line_cnt_diff "@" >> JOB_OUT
print "" >> JOB_OUT
print "GAwk Ended" >> JOB_OUT
}
我实际上没有收到任何错误消息,但退出状态为127,这恰好发生在我的bash脚本调用gawk脚本时。
在两台电脑中,gawk都在/ bin / gawk。
这是调用它的代码:
$JOB_RUN -b -v FILE_OT_COMN=$FILE_OT_COMN \
-v FILE_OT_DIFF=$FILE_OT_DIFF \
-v JOB_OUT=$JOB_OUT \
-v p_fltr_srt=$fltr_srt \
-v p_fltr_len=$fltr_len \
-v p_base_srt=$base_srt \
-v p_base_len=$base_len \
$FILE_IN_FLTR $FILE_IN_BASE \
2>$JOB_ERR
如果您通过执行看到所有变量都存在:
./RN_Files_Cmpr.gawk -b -v FILE_OT_COMN=V_20170309.TXT.xstY -v FILE_OT_DIFF=V_20170309.TXT.xstN -v JOB_OUT=RUN.RN_Files_Cmpr.gawk.bsh.outlist -v p_fltr_srt=1 -v p_fltr_len=2 -v p_base_srt=117 -v p_base_len=2 timo.txt V_20170309.TXT
我读到错误127出现时,它找不到一些可执行文件,我相信这个案例必须是gawk,即使它在那里。顺便说一句gawk完美运行:
gawk '{ print substr($0,1,2) }' TESTFILE.txt
给出正确的输出。
有人能指出我做错了什么吗?谢谢