编辑文本文件的列

编辑文本文件的列

abc.txt 由两列数据组成,

1  A1021
2  A1021
3  A1022
4  A1022

我想要另一个测试文件,比如 pqr.txt(替换A1021by1A1022by2等等)。

我使用以下常用的 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

我有兴趣用A1021by 1A1022by2A1026by3等来替换。任何其他建议(例如使用 awk 或 python)都可能对我有帮助。

答案1

如果您希望输出始终递增:

(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";
}

相关内容