根据保留 header 行的列值拆分文本文件(基因组数据)
split text file (Genome data) based on column values keeping header line
我有一个大的基因组数据文件 (.txt),格式如下。我想根据染色体列 chr1, chr2..chrX,chrY
拆分它,依此类推,在所有拆分文件中保留 header 行。我如何使用 unix/linux 命令执行此操作?
基因组数据
variantId chromosome begin end
1 1 33223 34343
2 2 44543 46444
3 2 55566 59999
4 3 33445 55666
结果
file.chr1.txt
variantId chromosome begin end
1 1 33223 34343
file.chr2.txt
variantId chromosome begin end
2 2 44543 46444
3 2 55566 59999
file.chr3.txt
variantId chromosome begin end
4 3 33445 55666
这是人类基因组的数据(即总是 46 条染色体)吗?如果是这样,怎么样:
for chr in $(seq 1 46)
do
head -n1 data.txt >chr$chr.txt
done
awk 'NR != 1 { print [=10=] >>("chr"".txt") }' data.txt
(这是第二次编辑,基于@Sasha 上面的评论。)
请注意,("chr"".txt")
周围的括号在 GNU awk 上显然不需要,但它们在我的 OS X 版本的 awk 上。
我有一个大的基因组数据文件 (.txt),格式如下。我想根据染色体列 chr1, chr2..chrX,chrY
拆分它,依此类推,在所有拆分文件中保留 header 行。我如何使用 unix/linux 命令执行此操作?
基因组数据
variantId chromosome begin end
1 1 33223 34343
2 2 44543 46444
3 2 55566 59999
4 3 33445 55666
结果
file.chr1.txt
variantId chromosome begin end
1 1 33223 34343
file.chr2.txt
variantId chromosome begin end
2 2 44543 46444
3 2 55566 59999
file.chr3.txt
variantId chromosome begin end
4 3 33445 55666
这是人类基因组的数据(即总是 46 条染色体)吗?如果是这样,怎么样:
for chr in $(seq 1 46)
do
head -n1 data.txt >chr$chr.txt
done
awk 'NR != 1 { print [=10=] >>("chr"".txt") }' data.txt
(这是第二次编辑,基于@Sasha 上面的评论。)
请注意,("chr"".txt")
周围的括号在 GNU awk 上显然不需要,但它们在我的 OS X 版本的 awk 上。