Пожалуйста, извините меня заранее за публикацию такой большой части моей проблемы, но я просто не могу указать на ту часть, которая не работает...
У меня есть входные файлы, подобные этому (abas-FO, если вам интересно знать):
.fo U|xiininputfile = whatever
.type text U|xigibsgarnich
.assign U|xigibsgarnich
..
..Comment
.copy U|xigibswohl = Spaß
.ein "ow1/UWEDEFTEST.FOP"
.in "ow1/UWEINPUT2"
.continue BOTTOM
.read "SOemthing" U|xttmp
!BOTTOM
..
..
Теперь я хочу рекурсивно следовать каждому оператору .in[put]/.ein[gabe], анализировать упомянутый файл и, если я еще не знаю его, добавить его в массив. Мой код выглядит так:
#!/bin/awk -f
function getFopMap(inputregex, infile, mandantdir, infiles){
while(getline f < infile){
#printf "*"
#don't match if there is a '
if(f ~ inputregex "[^']"){
#remove .input-part
sub(inputregex, "", f)
#trim right
sub(/[[:blank:]]+$/, "", f)
#remove leading and trailing "
gsub(/(^\"|\"$)/,"" ,f)
if(!(f in infiles)){
infiles[f] = "found"
}
}
}
close(infile)
for (i in infiles){
if(infiles[i] == "found"){
infiles[i] = "parsed"
cmd = "test -f \"" i "\""
if(system(cmd) == 0){
close(cmd)
getFopMap(inputregex, f, mandantdir, infiles)
}
}
}
}
BEGIN{
#Matches something like [.input myfile] or [.ein "ow1/myfile"]
inputregex = "^\\.(in|ein)[^[:blank:]]*[[:blank:]]+"
#Get absolute path of infile
cmd = "python -c 'import os;print os.path.abspath(\"" ARGV[1] "\")'"
cmd | getline rootfile
close(cmd)
infiles[rootfile] = "parsed"
getFopMap(inputregex, rootfile, mandantdir, infiles)
#output result
for(infile in infiles) print infile
exit
}
Я вызываю скрипт (в том же каталоге, к которому относятся пути) следующим образом:
./скрипт вл1/UWEDEFTEST.FOP
Я не получаю выход. Просто зависает. Если я удалю комментарий перед командой printf "*", я увижу звезды без конца.
Я ценю каждую помощь и подсказки, как сделать это лучше.
Мой awk: gawk Версия 3.1.7
BEGIN
. - person fedorqui 'SO stop harming'   schedule 25.09.2014