在处理涉及小时运行平均值的气候变量的文件中,小时按顺序进行。
是否有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命令来做这样的事情,那么在其他任何方法中都有这样的事情吗?
感谢您的回答。
答案 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+)
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简洁速记。