Python 按顺序索引增加字符串
在一个处理气候变量的文件中,涉及到小时的运行平均值,小时按顺序进行 是否存在一个Python 按顺序索引增加字符串,python,bash,awk,sed,Python,Bash,Awk,Sed,在一个处理气候变量的文件中,涉及到小时的运行平均值,小时按顺序进行 是否存在一个sed/awk命令,该命令将占用文件中的小时(字符串),然后将其更改为2,以便下次读取文件时将其(202)等改为(204)等 请参阅下面添加到“i”的数字 timeprime = i + 569 'define climomslp = prmslmsl(t = 'timeprime' ) 我的目标是,在本例中,每次文件通过处理数据所涉及的其他命令运行时,将数量增加569 我旁边下一个想要的数字是 timep
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命令来做这样的事情,那么在其他方法中是否有这样的事情
谢谢你的回答 您完全可以用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+)
该函数可以将应用于匹配对象的字符串作为“替换”,而不是字符串。因此,不匹配的行将不变地打印;这样做的行将用匹配项替换相同的两部分,但第二部分替换为
int(number)+2
以下是使用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}
开头的行,在这些行上,第五个字段递增2^timeprime=i+
这是awk对打印行的神秘速记1
| python inctimeprime.py
添加到您的shell管道中即可使用。嗯,当我针对想要修改的文件执行脚本时,遇到了麻烦,它挂在引入sys.stdin的地方。我不知道你是如何运行它的。我把它写成了一个过滤器,它从stdin读取数据并写入stdout。例如,如果您希望它将两个文件名作为命令行参数,从第一个文件名读取,然后写入第二个文件名,请使用将open(sys.argv[1])作为fin,将open(sys.argv[2],'w')作为fout:
,然后将作为fin:
中的行,然后使用fout.write(…)
。官方教程对此进行了更详细的解释,或者,如果您向我们展示您的脚本,我可以向您展示如何将其融入其中。但除此之外,我所能做的就是猜测你想要什么。非常感谢你的帮助和指导,帮助我理解你在上面所做的事情!祝你晚上愉快。