按顺序索引增加字符串

时间:2015-05-23 04:22:49

标签: python bash awk sed

在处理涉及小时运行平均值的气候变量的文件中,小时按顺序进行。

是否有sed / awk命令在文件中占用该小时(字符串),然后将其更改为2,因此下次读取文件时(202)依此类推到(204)等...

查看下面添加到“i”的号码。

 timeprime = i + 569 
 'define climomslp = prmslmsl(t = 'timeprime' ) 

我的目标是在每次文件运行处理数据所涉及的其他命令时,将此情况下的数字569增加一。

我旁边的下一个想要的号码是

timeprime = i + 570 (where 569 is increased by one) 
之后......

timeprime = i + 571 (where 570 is increased by one)

如果没有sed / awk命令来做这样的事情,那么在其他任何方法中都有这样的事情吗?

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

你绝对可以用Python(或Perl,Ruby,或者你喜欢的任何其他脚本语言,但你包含一个Python标签)来做到这一点。例如:

#!/usr/bin/env python

import re
import sys
def replace(m):
    return '{}{}'.format(m.group(1), int(m.group(2))+2)
for line in sys.stdin:
    sys.stdout.write(re.sub(r'(timeprime = i \+ )(\d+)', replace, line))

希望正则表达式本身很容易理解:

(timeprime = i \+ )(\d+)

Regular expression visualization

Debuggex Demo

sub函数可以将a应用于匹配对象而不是字符串作为“替换”。因此,不匹配的行将保持不变;将匹配替换为相同的两个部分的行,但第二部分替换为int(number)+2

答案 1 :(得分:1)

这是使用awk的另一种选择:

awk '/^timeprime = i [+]/{$5+=2} 1' file

从这个文件开始:

$ cat file
timeprime = i + 569 
 'define climomslp = prmslmsl(t = 'timeprime' ) 

我们可以使用awk命令创建一个新文件:

$ awk '/^timeprime = i [+]/{$5+=2} 1' file
timeprime = i + 571
 'define climomslp = prmslmsl(t = 'timeprime' ) 

要使用新文件覆盖原始文件,请使用:

awk '/^timeprime = i [+]/{$5+=2} 1' file >file.tmp && mv file.tmp file

如何运作

  • /^timeprime = i [+]/{$5+=2}

    这会查找以^timeprime = i +开头的行,并且在这些行上,第五个字段会增加2。

  • 1

    这是用于打印线条的awk简洁速记。