редактирование столбца текстового файла


-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, могут мне помочь.


Извините, я просто пропустил добавление следующего в части кодирования как print OUT "$ data [0] \ t $ data [1] \ n";
user316350

Ответы:


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";
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.