使用perl将基于染色体的`.bed`文件拆分为`chromosomeName.bed`

Ren*_*nee 1 perl split file

我试图用基于染色体perl.bed文件分成多个文件.例如,我的输入文件是example.bed:

chr1    12190   12227
chr1    12595   12721
chr2    876522  876688
chr2    887378  887521
...
Run Code Online (Sandbox Code Playgroud)

我的理想输出是两个.bed文件:

chr1.bed

chr1    12190   12227
chr1    12595   12721
Run Code Online (Sandbox Code Playgroud)

chr2.bed

chr2    876522  876688
chr2    887378  887521
Run Code Online (Sandbox Code Playgroud)

我知道使用awk这样做更容易,但我希望能够弄清楚如何使用perl脚本来做到这一点.

gle*_*man 5

您可以维护文件句柄的哈希:

$ cat example.bed 
chr1 12190 12227
chr1 12595 12721
chr2 876522 876688
chr2 887378 887521

$ perl -ane '
    open $out{$F[0]}, ">", $F[0].".bed" unless $out{$F[0]}; 
    print { $out{$F[0]} } $_;
' example.bed

$ cat chr1.bed
chr1 12190 12227
chr1 12595 12721

$ cat chr2.bed
chr2 876522 876688
chr2 887378 887521
Run Code Online (Sandbox Code Playgroud)

如果你有数百种不同的chromasomes,你可能会用完打开的文件句柄.在这种情况下,您必须打开每行的追加,打印和关闭.