2013-12-10 58 views
0

我有了格式製表符分隔的.txt文件:在製表符分隔的文件用值來替換一列從另一個

chrI 0 1 -4.231 
chrI 1 2 -3.257 
chrI 2 3 -2.653 
chrI 3 4 -2.102 
chrI 4 5 -1.685 
chrI 5 6 -1.331 
chrI 6 7 -1.036 
chrI 7 8 -0.728 
chrI 8 9 -0.527 
chrI 9 10 -0.401 

是否有任何機會,我可以得到文字牧馬人更換列2中的所有條目與列3中的值一樣,列3基本上是重複的?

像這樣的:

chrI 1 1 -4.231 
chrI 2 2 -3.257 
chrI 3 3 -2.653 
chrI 4 4 -2.102 
chrI 5 5 -1.685 
chrI 6 6 -1.331 
chrI 7 7 -1.036 
chrI 8 8 -0.728 
chrI 9 9 -0.527 
chrI 10 10 -0.401 

有沒有辦法在Perl做到這一點?

回答

1

從命令行:

perl -lane 'BEGIN{$"="\t"}$F[2]=$F[1];print "@F"' File.txt [>outFile] 

最後,可選的參數指示輸出到文件。

輸出:

chrI 0 0 -4.231 
chrI 1 1 -3.257 
chrI 2 2 -2.653 
chrI 3 3 -2.102 
chrI 4 4 -1.685 
chrI 5 5 -1.331 
chrI 6 6 -1.036 
chrI 7 7 -0.728 
chrI 8 8 -0.527 
chrI 9 9 -0.401 

或者作爲腳本(相同的輸出):

use strict; 
use warnings; 

$" = "\t"; 

while (<>) { 
    my @F = split; 
    $F[2] = $F[1]; 
    print "@F\n"; 
} 

命令行用法:perl script.pl File.txt [>outFile]

希望這有助於!

0

在perl的:

while (<$input>){ 
    chomp; 
    my @split = split(/\t/); 
    print "$split[0]\t$split[1]\t$split[1]\t$split[3]\n"; 
} 
0

在TextWrangler中搜索^(\w+)\s+(\w+)\s+(\w+)\s+並用find的「Matching:」替代爲\1\t\3\t\3\t啓用「Grep」選項。 (放輕鬆 - 使用選項卡進行對齊,而不是使用不同數量的空白...)

但是,如果需要空白,請將^(\w+\s+)(\w+\s+)(\w+\s+)替換爲\1\3\3 ... - 至少適用於樣本數據。

相關問題