too*_*oop 3 unix linux shell perl command-line
有没有人知道任何unix命令/ perl脚本会插入特定字符(可以输入为十六进制(即7C)或实际字符(即|))在特定字符的第n次重复出现的位置.即perl script.pl "," 3 "|" data.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
Run Code Online (Sandbox Code Playgroud)
它应该在脚本运行后具有此功能:
fd,3232,gfd67gf|
peas,989767,jkdfnfgjhf|
dhdhjsk,267,ujfdsy|fuyds,637296,ldosi|fduy,
873,fuisouyd|try
save,2837,ipoi
Run Code Online (Sandbox Code Playgroud)
小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;
}
Run Code Online (Sandbox Code Playgroud)
运行perl script.pl file.csv.
注意:您可以my $i在while(<>)循环之前放置声明以进行全局计数,而不是每行的单独计数.我不太清楚我在这方面理解你的问题.