我有一个制表符分隔的.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中执行此操作?
答案 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
... - 至少适用于样本数据。