Mar*_*røm 2 perl awk increment
我有大型矩阵文件,在clolumns中只包含"0"和"a",我想这样做:
perl -pe 'BEGIN { our $i = 1; } s/a/($i++)/ge;'; < FILE > NEW_FILE
Run Code Online (Sandbox Code Playgroud)
但每行只增加一次,而不是每行增加一次.
所以如果我在文件中的第一行是:
0 0 a a a
Run Code Online (Sandbox Code Playgroud)
perl命令给了我:
0 0 1 2 3
Run Code Online (Sandbox Code Playgroud)
虽然我想要
0 0 1 1 1
Run Code Online (Sandbox Code Playgroud)
以及下一行2 0 2 0 2等等......
这可能与awk有关,但使用:
'{ i=1; gsub(/a/,(i+1));print}' tmp2
Run Code Online (Sandbox Code Playgroud)
只给我0和2的所有线...
只是增加之前,而不是每次替换:
awk '{i++; gsub(/a/,i)}1' file
Run Code Online (Sandbox Code Playgroud)
这样,变量每行更新一次,而不是每个记录更新一次.
这同样适用于Perl脚本:
perl -pe 'BEGIN { our $i = 0; } $i++; s/a/$i/ge;' file
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)