Python 从文件中提取每一行并将其作为变量传递给;foreach“;环
有人能帮我想出一个简单的方法来使用任何脚本吗?我将在Linux上运行脚本 1)我有一个文件1,其中包含以下行:Python 从文件中提取每一行并将其作为变量传递给;foreach“;环,python,regex,linux,sed,Python,Regex,Linux,Sed,有人能帮我想出一个简单的方法来使用任何脚本吗?我将在Linux上运行脚本 1)我有一个文件1,其中包含以下行: (Bank8GntR[3] | Bank8GntR[2] | Bank8GntR[1] | Bank8GntR[0] ), (Bank7GntR[3] | Bank7GntR[2] | Bank7GntR[1] | Bank7GntR[0] ), (Bank6GntR[3] | Bank6GntR[2] | Bank6GntR[1] | Bank6GntR[0] ), (
(Bank8GntR[3] | Bank8GntR[2] | Bank8GntR[1] | Bank8GntR[0] ),
(Bank7GntR[3] | Bank7GntR[2] | Bank7GntR[1] | Bank7GntR[0] ),
(Bank6GntR[3] | Bank6GntR[2] | Bank6GntR[1] | Bank6GntR[0] ),
(Bank5GntR[3] | Bank5GntR[2] | Bank5GntR[1] | Bank5GntR[0] ),
2)我需要将文件1的内容修改为以下内容并写入文件2
(Bank15GntR[3] | Bank15GntR[2] | Bank15GntR[1] | Bank15GntR[0] ),
(Bank14GntR[3] | Bank14GntR[2] | Bank14GntR[1] | Bank14GntR[0] ),
(Bank13GntR[3] | Bank13GntR[2] | Bank13GntR[1] | Bank13GntR[0] ),
(Bank12GntR[3] | Bank12GntR[2] | Bank12GntR[1] | Bank12GntR[0] ),
因此,我必须:
假设您不必使用python,可以使用
awk
:
cat test.txt|awk'匹配($0,/Bank([0-9]+)GntR/,nums){d=nums[1]+7;gsub(/Bank[0-9]+GntR\[/,“Bank”d“GntR[”);print}'
这将提供所需的输出
这里的要点是,
match
将匹配您的数据,并允许捕获组,您可以使用这些组提取数字。由于awk支持算术,您可以在awk中添加7,然后替换该行其余部分的所有值。注意,我假设该行中的所有值都有相同的数字。关于Python中的类似内容:
# a function that adds 7 to a matched group.
# groups 1 and 2, we grabbed (Bank) to avoid catching the digits in brackets.
def plus7(matchobj):
return '%s%d' % (matchobj.group(1), int(matchobj.group(2)) + 7)
# iterate over the input file, have access to the output file.
with open('in.txt') as fhi, open('out.txt', 'w') as fho:
for line in fhi:
fho.write(re.sub('(Bank)(\d+)', plus7, line))
您没有将其替换为“数字匹配乘以2”抱歉!我刚刚意识到这一点,并做了更改。你必须使用python吗?或者它可以是任何东西吗?你的标签提到
sed
,你强调这是一个在Linux上运行的脚本,所以我不确定它是否必须是python。实际上它可以是任何东西…python不一定要。注意:with
在2.7之前只支持一个文件句柄。如果你在使用任何东西,你需要嵌套两个语句哇!这就像一个符咒。我从来没有用我在awk的基本知识想到过这一点。非常感谢!!实际上,我必须查找如何获得awk,以允许我自己使用捕获组。我发现以下com这是非常有用的!谢谢!非常有用的链接!!