gpt4 book ai didi

perl - 用每行增加的数字替换字符

转载 作者:行者123 更新时间:2023-12-02 06:32:30 24 4
gpt4 key购买 nike

我有一个很大的矩阵文件,其中仅包含“0”和“a”,我想这样做:

perl -pe 'BEGIN { our $i = 1; } s/a/($i++)/ge;'; < FILE > NEW_FILE

但每行只增加一次,而不是每行的每个实例。

所以如果我在文件中的第一行是:

0 0 a a a

perl 命令给我:

0 0 1 2 3

虽然我想要

0 0 1 1 1 

在下一行,例如 2 0 2 0 2 等等...

这应该可以用 awk 来做,但是使用:

'{ i=1; gsub(/a/,(i+1));print}' tmp2 

只给我所有行的 0 和 2...

最佳答案

只是在之前递增,而不是在每次替换时递增:

awk '{i++; gsub(/a/,i)}1' file

这样,变量每行更新一次,而不是每条记录更新一次。

这同样适用于 Perl 脚本:

perl -pe 'BEGIN { our $i = 0; } $i++; s/a/$i/ge;' file

测试

$ cat a
0 0 a a a
2 3 a a a
$ awk '{i++; gsub(/a/,i)}1' a
0 0 1 1 1
2 3 2 2 2
$ perl -pe 'BEGIN { our $i = 0; } $i++; s/a/$i/ge;' a
0 0 1 1 1
2 3 2 2 2

关于perl - 用每行增加的数字替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com