Не могли бы вы попробовать следующее, учитывая, что вы НЕ хотите, чтобы //
в ваших выходных файлах.
awk '
/^\/\//{
close(file".txt")
flag=val=""
}
/#=GF AC PF.*/{
flag=1
file=$0
sub(/^#=/,"",file)
print val ORS $0 > file".txt"
next
}
flag{
print > file".txt"
}
!flag{
val=val?val ORS $0:$0
}' Input_file
Приведенный выше код удалит #=
из имен файлов, если вам это тоже нужно в выходных данныхИмена файлов затем удалите оператор sub(/^#=/,"",file)
из приведенного выше кода.
Объяснение: Добавление объяснения для вышеуказанного кода тоже сейчас.
awk ' ##awk program starts here.
/^\/\//{ ##Checking condition if a line has // then do following.
close(file".txt") ##Using close command to close file with file named file".txt" here to avoid TOO MANY FILES OPENED.
flag=val="" ##Nullifying variables flag and val here.
}
/#=GF AC PF.*/{ ##Checking condition if a line starts from #=GF AC PF .* will match anything here, if yes then do following.
flag=1 ##Setting variable flag as 1 here.
file=$0 ##Setting variable file value to current line here.
sub(/^#=/,"",file) ##Substituting #= from start of the line with variable file.
print val ORS $0 > file".txt" ##Printing variable val ORS(output record separator) current line and printing it to file".txt"
next ##next will skip all further statements from here onward.
}
flag{ ##Checking condition if variable flag is SET then do following.
print > file".txt" ##Printing current lines to file".txt" file name.
}
!flag{ ##Checking condition here is variable flag is NOT SET then do following.
val=val?val ORS $0:$0 ##Creating variable val and concatenating to its own value.
}' Input_file ##Mentioning Input_file name here.