내 문제의 그런 큰 부분을 게시 사전에 저를 용서해주십시오,하지만 난 그냥 실패 부분에 내 손가락을 넣어 수 없습니다 이 같은 (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 각에 따라 재귀하려면 [넣어]/EIN [별점] -statement, 언급 된 파일을 구문 분석하고 내가 돈이 ' 그것을 아직 알지 못한다면 그것을 배열에 추가하십시오. 내 코드는 다음과 같습니다
이 같은 (경로가를 기준으로 같은 디렉토리에) 스크립트를 호출#!/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
}
:
./script ow1/UWEDEFTEST.FOP
출력이 없습니다. 그냥 끊깁니다. printf "*"명령 전에 주석을 제거하면 끝나지 않고 별을 볼 수 있습니다.
모든 도움과 의견을 보내 주시면 감사하겠습니다.
내 AWK : 둔한 버전 3.1.7
'BEGIN' 블록 내 모든 작업을 수행합니다. – fedorqui
gawk의 아주 오래된 버전입니다. 매우 유용한 기능이 많지 않으므로 현재 버전으로 업그레이드해야합니다. –
@fedorqui 알아요. 나중에 프로그램에서 재귀 적으로 발견 된 파일을 읽어야하므로 {} 기능을 사용하는 이유가 표시되지 않고 하나의 파일 만 처리합니다. 하지만 어쩌면 나는 중요한 것을 놓치고있어. –