我有一个如下所示的行文件,并希望转换为两种列格式。
>00000_x1688514
TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968
TGCTTGGACTACATATTGTTGAGGGTTGTA
...
所需的输出
>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA
...
我将不胜感激任何帮助。感谢。
答案 0 :(得分:7)
我不知道您是否了解用于读/写和其他遗传功能的BioPerl模块。你的问题可以这样写。
#!/usr/bin/perl
use strict;
use warnings;
use Bio::SeqIO;
my $file = 'o33.txt';
my $in = Bio::SeqIO->new( -file => $file,
-format => 'fasta');
while ( my $seq = $in->next_seq() ) {
print $seq->id, "\t", $seq->seq, "\n";
}
__END__
00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA
答案 1 :(得分:6)
在python中:
fd = open('filepath')
cols = izip(fd, fd)
with open('output_filepath') as outfile:
for col in cols:
outfile.write('\t'.join(col).replace('\n', '') +'\n')
所需的输出应该在output_filepath
答案 2 :(得分:2)
另一个Perl选项是将记录分隔符设置为'>',一次读取两行,然后用换行符替换选项卡:
use Modern::Perl;
local $/ = '>';
do { s/\n/\t/; print }
for <DATA>;
__DATA__
>00000_x1688514
TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968
TGCTTGGACTACATATTGTTGAGGGTTGTA
输出:
>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA
对于文件:
use Modern::Perl;
use autodie;
open my $inFile, '<', 'inFile.txt';
open my $outFile, '>', 'outFile.txt';
local $/ = '>';
do { s/\n/\t/; print $outFile $_ }
for <$inFile>;
close $inFile;
close $outFile;
希望这有帮助!
答案 3 :(得分:1)
一种方法:
perl -i -pe 's/\n/ / unless m/^[ACGT]+$/' FILENAME
这将就地编辑文件FILENAME
,用不是A,C,G和T字符串的每一行中的空格替换换行符。
答案 4 :(得分:0)
使用awk
:
awk '{ printf "%s", $0 (substr( $0, 1, 1 ) == ">" ? " " : ORS) }' infile
输出:
>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA
答案 5 :(得分:0)
在Ruby中我会使用类似的东西:
File.readlines('test.txt').map(&:strip).each_slice(2) do |row|
puts row.join(' ')
end
哪个输出:
>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA
答案 6 :(得分:0)
更整洁的Python解决方案:
from itertools import izip
with open('test.txt') as inf, open('newtest.txt', 'w') as outf:
for head,body in izip(inf, inf):
outf.write(head.rstrip() + ' ' + body)
答案 7 :(得分:0)
假设输入采用真FASTA
格式,您可以使用awk
和getline
函数:
awk '/^>/ { printf "%s ", $0; getline; print }' file.txt
输出:
>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA
HTH