-1

abc.txt состоит из двух столбцов данных как

1  A1021
2  A1021
3  A1022
4  A1022

Я хочу другой тестовый файл, скажем, pqr.txt (замена A1021 на 1 и A1022 на 2 и т.д.).

Я использовал следующий обычный код Perl в качестве

open(IN,"abc.txt") or die;
open(OUT,">pqr.txt") or die;
While(<IN>) {
    chomp;
    $curline = $_;
    @data = split(' ',$curline);
    If($data[1] eq A1021) {$data[1] = 1;}
    If ($data[1] eq A1022) {$data[1] = 2;}
}
close(IN)
close(OUT)

Как я могу сделать цикл, если у меня есть большой набор данных (скажем, 500) и разрывные значения во втором столбце в файле abc.txt как

1  A1021
2  A1021
3  A1022
4  A1022
5  A1026
6  A1026

Я заинтересован в замене A1021 на 1 , A1022 на 2 и A1026 на 3 и так далее. Любые другие предложения, такие как использование awk или python, могут мне помочь.

1 ответ1

0

Если вы хотите, чтобы выходы всегда увеличивались:

(A1021, A1021, A1025, A1029, A1025 = 1, 1, 2, 3, 4)

$i = 0;
$last = "";

while (<>) {
    chomp;
    @data = split;
    if ($data[1] ne $last) {
        ++$i;
        $last = $data[1];
    }
    $data[1] = $i;
    print "@data\n";
}

Если вы хотите, чтобы один и тот же вход имел одинаковый вывод:

(A1021, A1021, A1025, A1029, A1025 = 1, 1, 2, 3, 2)

$i = 0;
%v = ();

while (<>) {
    chomp;
    @data = split;
    $data[1] = $v{$data[1]} //= ++$i;
    print "@data\n";
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .