python 修改字符串 循环_python – 模式匹配并用if else循环替换字符串

如果您的真实输入文件与您发布的文件相同,即使是低于一个也可以提供所需的输出.

awk 'BEGIN{split("R,S,T",a,/,/)}f=$2~/^H[0-9]+$/{$2 = $2 a[++c]}!f{c=0}1' infile

说明

> split(“R,T”,/) – 用分隔符逗号分割字符串“R,并保存在数组a中,所以它变为[1] = R,a [2 ] = S,a [3] = T.

> f = $2~ / ^ H [0-9] $/ – f是变量,验证regexp $2~ / ^ H [0-9] $/,返回布尔状态.如果它返回true则变量f将为真,否则为false

> $2 = $2 a [c]如果高于1则为真,则修改第二个字段,因此第二个字段将具有现有值加数组a值,对应于索引(c),c是预增量变量

>!f {c = 0}如果变量f为假,则重置变量c,而不是连续.

最后> 1执行默认操作,即打印当前/记录/行,打印$0.要知道awk是如何工作的,请使用awk’1’infile,它将打印所有记录/行,而awk’0’infile则不打印任何内容.除零以外的任何数字都为true,这会触发默认行为.

检测结果:

$cat infile

1ECLI H813 98 7.529 8.326 9.267

1ECLI H813 99 7.427 8.470 9.251

1ECLI C814 100 7.621 8.513 9.263

1ECLI H814 101 7.607 8.617 9.289

1ECLI H814 102 7.633 8.489 9.156

1ECLI H814 103 7.721 8.509 9.305

1ECLI C74 104 8.164 8.733 10.740

1ECLI H74R 105 8.247 8.690 10.799

$awk 'BEGIN{split("R,/)}f=$2~/^H[0-9]+$/{$2 = $2 a[++c]}!f{c=0}1' infile

1ECLI H813R 98 7.529 8.326 9.267

1ECLI H813S 99 7.427 8.470 9.251

1ECLI C814 100 7.621 8.513 9.263

1ECLI H814R 101 7.607 8.617 9.289

1ECLI H814S 102 7.633 8.489 9.156

1ECLI H814T 103 7.721 8.509 9.305

1ECLI C74 104 8.164 8.733 10.740

1ECLI H74R 105 8.247 8.690 10.799

如果你想要更好的格式,如tab或其他一些char作为字段分隔符,那么你可以使用下面一个,修改OFS变量

$awk -v OFS="\t" 'BEGIN{split("R,/)}f=$2~/^H[0-9]+$/{$2 = $2 a[++c]}!f{c=0}{$1=$1}1' infile

1ECLI H813R 98 7.529 8.326 9.267

1ECLI H813S 99 7.427 8.470 9.251

1ECLI C814 100 7.621 8.513 9.263

1ECLI H814R 101 7.607 8.617 9.289

1ECLI H814S 102 7.633 8.489 9.156

1ECLI H814T 103 7.721 8.509 9.305

1ECLI C74 104 8.164 8.733 10.740

1ECLI H74R 105 8.247 8.690 10.799

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值