有人可以帮我在awk,grep,sed,perl或python中编写以下要求的脚本吗?
输入文件“raw.fa”:
>CLocus_1_Sample_61_Locus_1_Allele_0 [JPKM01095229.1, 31450, +]
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGATTGGAG
>CLocus_1_Sample_67_Locus_1_Allele_0 [JPKM01095229.1, 31450, +]
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGATTGGAG
>CLocus_1_Sample_107_Locus_1_Allele_0 [JPKM01095229.1, 31450, +]
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGATTGGAG
>CLocus_1_Sample_107_Locus_1_Allele_1 [JPKM01095229.1, 31450, +]
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGGTTGAAG
>CLocus_41_Sample_158_Locus_53_Allele_0 [JPKM01105094.1, 1700, +]
TGCAGGTTATCCAGCTCTATTCTGCACTGGCCATCGTACCAAATAGCAGGAGGGT
>CLocus_41_Sample_159_Locus_31_Allele_0 [JPKM01105094.1, 1700, +]
TGCAGGTTATCCAGCTCTATTCTGCACTGGCCATCGTACCAAATAGCAGGAGGGT
>CLocus_86_Sample_161_Locus_103_Allele_0 [JPKM01106288.1, 770, -]
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACACACTTGGCTCCCATTGGGATGACTCCTTT
>CLocus_86_Sample_164_Locus_98_Allele_0 [JPKM01106288.1, 770, -]
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACACACTTGGCTCCCATTGGGATGACTCCTTT
>CLocus_86_Sample_166_Locus_110_Allele_0 [JPKM01106288.1, 770, -]
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACTCACTTGGCTCCCATTGGGATGACTCCTTT
>CLocus_86_Sample_167_Locus_123_Allele_0 [JPKM01106288.1, 770, -]
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACTCACTTGGCTCCCATTGGGATGACTCCTTT
我想用locus分割上面的文件,每个基因座有1个文件,保留第一行的DNA(第二行)和样本#,产生三个单独的.fa文件:
“locus1.fa”:
>Sample_61
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGATTGGAG
>Sample_67
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGATTGGAG
>Sample_107
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGATTGGAG
>Sample_107
TGCAGGTGTGTTCTGCAGATCCAAACACAAAGAGGCAGGGGTTGAAG
“locus41.fa”:
>Sample_158
TGCAGGTTATCCAGCTCTATTCTGCACTGGCCATCGTACCAAATAGCAGGAGGGT
>Sample_159
TGCAGGTTATCCAGCTCTATTCTGCACTGGCCATCGTACCAAATAGCAGGAGGGT
“locus86.fa”:
>Sample_161
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACACACTTGGCTCCCATTGGGATGACTCCTTT
>Sample_164
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACACACTTGGCTCCCATTGGGATGACTCCTTT
>Sample_166
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACTCACTTGGCTCCCATTGGGATGACTCCTTT
>Sample_167
TGCAGGGAACCGTGCTCAGCTCTGGAGTATTCCCACTCACTTGGCTCCCATTGGGATGACTCCTTT
感谢您的帮助!我发现awk代码首先出现分裂,但不是如何分割相似行的分组(例如所有带有locus86标题的行和它们的第二行DNA序列)。
-Chris Martin
答案 0 :(得分:2)
如果你有一小部分" locus"价值观,你可以为他们寻找:
grep -A 1 locus86 raw.fa > locus86.tmp
然后重新格式化该行:
sed 's/>.*(Sample .*)_Locus_.*/\1/' locus86.tmp > locus86.fa
(显然你可以将它们与管道结合使用而不是使用中间文件)。
如果您有一组更大或未知的基因座值,那么像perl这样的脚本编写是有意义的。需要注意的是,打开/关闭文件可能会很昂贵,这里有一些伪代码:
open(IN, "raw.fa");
my $OUT = undef;
while (<IN>) {
if (/>/) {
my ($sample, $locus) = ($_ ~= /.*\(Sample_.*\)_\(Locus_.*\)_Allele/);
if (defined($OUT)) {
close($OUT);
}
open($OUT, "$locus.fa");
print $OUT ">$sample\n";
}
else {
print $OUT $_;
}
}
答案 1 :(得分:0)
#!/usr/bin/perl
$file = shift;
my $locusfile;
open FILE, $file;
while(<FILE>)
{
chomp($_);
if (/CLocus_([0-9]*)_Sample_([0-9]*)_.*/)
{
$locusfile="locus" . $1 . ".fa";
$cmd = qq{echo ">Sample_$2" >> $locusfile};
}
else
{
$cmd = qq{echo "$_" >> $locusfile};
}
system($cmd);
}
close(FILE);
我无法追加&#34;&gt;&#34;在行尾开始的字符 - 在插入system
命令时遇到很多问题...所以它不是一个完整的答案,但它可以做你想要的。
[固定]
干杯