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

列 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でこれを行う方法はありますか?

4

3 に答える 3

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]

お役に立てれば!

于 2013-12-10T19:18:00.317 に答える
0

TextWrangler で検索し、find の "Matching:" "Grep" オプションを有効^(\w+)\s+(\w+)\s+(\w+)\s+にして置き換えます。\1\t\3\t\3\t(簡単に言えば、空白の数を変えるのではなく、タブを使用して配置します...)

ただし、空白が必要な場合は…に置き換え^(\w+\s+)(\w+\s+)(\w+\s+)てください\1\3\3- 少なくともサンプルデータでは機能します。

于 2014-11-04T23:11:09.317 に答える