在制表符分隔的文件中用一个值替换一列

时间:2013-12-10 18:29:23

标签: perl replace textwrangler

我有一个制表符分隔的.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

我是否有机会获得文本管理器以使用columnn 3值替换第2列中的所有条目,以便第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中执行此操作?

3 个答案:

答案 0 :(得分: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]

希望这有帮助!

答案 1 :(得分:0)

在perl:

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

答案 2 :(得分:0)

在TextWrangler中搜索^(\w+)\s+(\w+)\s+(\w+)\s+并将\1\t\3\t\3\t替换为find&#39; s&#34;匹配:&#34; &#34; grep的&#34;选项已启用。 (放轻松 - 使用标签进行对齐而不是使用不同数量的空白......)

但是如果您需要空白,请将^(\w+\s+)(\w+\s+)(\w+\s+)替换为\1\3\3 ... - 至少适用于样本数据。