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

python– 模式匹配并用if else循环替换字符串,第1张

概述我有一个包含多行以“1ECLI H --- 12.345 .....”开头的文件.我想删除I和H之间的空格,并在迭代H模式时添加R / S / T.例如. H810如果连续三行重复,则应加上字母R,S(第二次迭代),T(第三次迭代).所以它将是H810R.任何帮助将不胜感激.文字如下所示1ECLI H813 98 7.529 8.326 9

我有一个包含多行以“1ECli H — 12.345 …..”开头的文件.我想删除I和H之间的空格,并在迭代H模式时添加R / S / T.例如. H810如果连续三行重复,则应加上字母R,S(第二次迭代),T(第三次迭代).所以它将是H810R.任何帮助将不胜感激.
文字如下所示

1ECli  H813   98   7.529   8.326   9.2671ECli  H813   99   7.427   8.470   9.2511ECli  C814  100   7.621   8.513   9.2631ECli  H814  101   7.607   8.617   9.2891ECli  H814  102   7.633   8.489   9.1561ECli  H814  103   7.721   8.509   9.3051ECli   C74  104   8.164   8.733  10.7401ECli  H74R  105   8.247   8.690  10.799

在chage

1ECli H813R   98   7.529   8.326   9.2671ECli H813S   99   7.427   8.470   9.2511ECli  C814  100   7.621   8.513   9.2631ECli H814R  101   7.607   8.617   9.2891ECli H814s  102   7.633   8.489   9.1561ECli H814T  103   7.721   8.509   9.3051ECli   C74  104   8.164   8.733  10.7401ECli  H74R  105   8.247   8.690  10.799

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

awk 'BEGIN{split("R,S,T",a,/,/)}f=~/^H[0-9]+$/{ =  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 infile1ECli  H813   98   7.529   8.326   9.2671ECli  H813   99   7.427   8.470   9.2511ECli  C814  100   7.621   8.513   9.2631ECli  H814  101   7.607   8.617   9.2891ECli  H814  102   7.633   8.489   9.1561ECli  H814  103   7.721   8.509   9.3051ECli   C74  104   8.164   8.733  10.7401ECli  H74R  105   8.247   8.690  10.799$awk 'BEGIN{split("R,/)}f=~/^H[0-9]+$/{ =  a[++c]}!f{c=0}1' infile1ECli H813R 98 7.529 8.326 9.2671ECli H813S 99 7.427 8.470 9.2511ECli  C814  100   7.621   8.513   9.2631ECli H814R 101 7.607 8.617 9.2891ECli H814S 102 7.633 8.489 9.1561ECli H814T 103 7.721 8.509 9.3051ECli   C74  104   8.164   8.733  10.7401ECli  H74R  105   8.247   8.690  10.799

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

$awk -v OFS="\t" 'BEGIN{split("R,/)}f=~/^H[0-9]+$/{ =  a[++c]}!f{c=0}{=}1'  infile1ECli   H813R   98  7.529   8.326   9.2671ECli   H813S   99  7.427   8.470   9.2511ECli   C814    100 7.621   8.513   9.2631ECli   H814R   101 7.607   8.617   9.2891ECli   H814S   102 7.633   8.489   9.1561ECli   H814T   103 7.721   8.509   9.3051ECli   C74     104 8.164   8.733   10.7401ECli   H74R    105 8.247   8.690   10.799
总结

以上是内存溢出为你收集整理的python – 模式匹配并用if else循环替换字符串全部内容,希望文章能够帮你解决python – 模式匹配并用if else循环替换字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1206066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存