abc.txt 由两列数据组成,
1 A1021
2 A1021
3 A1022
4 A1022
我想要另一个测试文件,比如 pqr.txt(替换A1021
by1
和A1022
by2
等等)。
我使用以下常用的 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
by 1
、A1022
by2
和A1026
by3
等来替换。任何其他建议(例如使用 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";
}