类似的东西:
awk 'BEGIN { filename="unknown.txt" } /^variable chrom=/ { close(filename); filename = substr($0, index($0, "=") + 1) ".txt"; } { print > filename }'
awk 代码在哪里
BEGIN { filename="unknown.txt" } # default file name, used only if the
# file doesn't start with a variable chrom=
# line
/^variable chrom=/ { # in such a line:
close(filename) # close the previous file (if open)
# and set the new filename
filename = substr($0, index($0, "=") + 1) ".txt" filename
}
{ print > filename } # print everything to the current file.
基本算法非常简单:逐行读取文件,当找到开始新部分的行时更改文件名,总是将当前行打印到当前文件,所以魔鬼在于将文件名与标记线。
filename = substr($0, index($0, "=") + 1) ".txt"
方法很简单,但对于您展示的示例有用:它采用= 之后的所有内容并附加.txt 以获取文件名。如果您的标记线比variable chrom=filenamestub 更复杂,则必须对其进行修改,但在这种情况下,我只能猜测您的要求,并且可能会猜错。