我有一个问题,我想按条件将一个文件分成更多文件。 INPUT:一个文本文件
variable chrom=chr1
1000 10
1010 20
1020 10
vriable chrom=chr2
1000 20
1100 30
1200 10
OUTPUT:此示例的两个文件。
chr1.txt
variable chrom=chr1
1000 10
1010 20
1020 10
chr2.txt
variable chrom=chr2
1000 20
1100 30
1200 10
因此,如果行以chrom = chr $ i(i = {1..22})=>开始,则为分隔符条件与其他文本文件分开。 谢谢
答案 0 :(得分:2)
这些方面的东西:
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
更复杂,则必须对其进行修改,但在这种情况下,我只能猜测您的要求并且可能会猜错。
答案 1 :(得分:1)
如果你知道它们之间有多少行,你可以使用
split -l 4 textfile.txt
这将在找到的第4行分割文本文件,生成文件xaa
和xab
,依此类推。