有谁知道任何 unix 命令/perl 脚本会在第 n 次重复出现的位置插入特定字符(可以输入为十六进制(即 7C)或实际字符(即 |))具体的字符。
即 perl script.pl ","3 "|"数据.txt
将用管道替换每第 3、6、9 等逗号。
因此,如果 data.txt 在脚本运行之前具有以下内容:
fd,3232,gfd67gf,
peas,989767,jkdfnfgjhf,
dhdhjsk,267,ujfdsy,fuyds,637296,ldosi,fduy,
873,fuisouyd,try
save,2837,ipoi
脚本运行后应该有这个:
fd,3232,gfd67gf|
peas,989767,jkdfnfgjhf|
dhdhjsk,267,ujfdsy|fuyds,637296,ldosi|fduy,
873,fuisouyd|try
save,2837,ipoi
最佳答案
解决问题的小 perl hack。使用 index
查找逗号的函数,替换正确的模数,和substr
执行替换。
use strict;
use warnings;
while (<>) {
my $x=index($_,",");
my $i = 0;
while ($x != -1) {
$i++;
unless ($i % 3) {
$_ = substr($_,0,$x) ."|". substr($_,$x+1);
}
$x = index($_,",",$x + 1)
}
print;
}
用 perl script.pl file.csv
运行.
注意:可以把声明放在my $i
在 while(<>)
之前循环以进行全局计数,而不是对每一行进行单独计数。不太确定我是否理解您在这方面的问题。
关于linux - perl - 用另一个字符替换每第 n 次(和多次)出现的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153302/