簡體   English   中英

將行轉換為列

[英]Convert rows into columns

我有一個如下所示的行文件,並希望轉換為兩列格式。

>00000_x1688514
TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968
TGCTTGGACTACATATTGTTGAGGGTTGTA
...

期望的輸出是

>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA
...

我將不勝感激任何幫助。 謝謝。

我不知道您是否了解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

在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

另一個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;

希望這可以幫助!

一種方法:

perl -i -pe 's/\n/ / unless m/^[ACGT]+$/' FILENAME

這將就地編輯文件FILENAME ,用不是A,C,G和T字符串的每一行中的空格替換換行符。

使用awk

awk '{ printf "%s", $0 (substr( $0, 1, 1 ) == ">" ? " " : ORS) }' infile

輸出:

>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA

在Ruby中我會使用類似的東西:

File.readlines('test.txt').map(&:strip).each_slice(2) do |row|
  puts row.join(' ')
end

哪個輸出:

>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA

更整潔的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)

假設輸入是真正的FASTA格式,您可以使用awkgetline函數:

awk '/^>/ { printf "%s ", $0; getline; print }' file.txt

輸出:

>00000_x1688514 TGCTTGGACTACATATGGTTGAGGGTTGTA
>00001_x238968 TGCTTGGACTACATATTGTTGAGGGTTGTA

HTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM