加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – perl – 用另一个字符替换每个第n个(和多个)字符的出现

发布时间:2020-12-13 23:57:01 所属栏目:Linux 来源:网络整理
导读:有没有人知道任何unix命令/ perl脚本会插入特定字符(可以输入为十六进制(即7C)或实际字符(即|))在特定字符的第n次重复出现的位置. 即perl script.pl“,”3“|” data.txt中 将用管道替换每个第3,第6,第9 ……等逗号. 因此,如果在脚本运行之前data.txt具有以
有没有人知道任何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

它应该在脚本运行后具有此功能:

fd,gfd67gf|
peas,jkdfnfgjhf|
dhdhjsk,ujfdsy|fuyds,ldosi|fduy,fuisouyd|try
save,ipoi

解决方法

小perl hack解决问题.使用索引函数查找逗号,模块替换正确的模块,使用substr执行替换.

use strict;
use warnings;

while (<>) {
    my $x=index($_,","); 
    my $i = 0; 
    while ($x != -1) {
        $i++; 
        unless ($i % 3) { 
            $_ = substr($_,$x) ."|". substr($_,$x+1); 
        }
        $x = index($_,$x + 1) 
    } 
    print;
}

使用perl script.pl file.csv运行.

注意:您可以在while(<>)循环之前放置声明my $i,以便进行全局计数,而不是每行的单独计数.我不太清楚我在这方面理解你的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读