从文件中提取每一行并将其作为变量传递到“foreach”循环

2024-04-20 07:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我想出一个简单的方法来使用任何脚本吗?我将在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] ),

 (Bank5GntR[3] | Bank5GntR[2] | Bank5GntR[1] | Bank5GntR[0] ),  

2)我需要将file1的内容修改如下并写入到file2

^{pr2}$

所以我必须:

  1. 读取文件1中的每一行
  2. 使用“search”使用正则表达式
  3. 与银行[0-9]国民生产总值相匹配
  4. 将\1替换为“7添加到匹配的号码”
  5. 把它插回去
  6. 将该行写入新文件。在

Tags: 文件方法脚本内容searchlinux银行file1
2条回答

在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))

假设您不必使用python,那么可以使用awk

cat test.txt | awk 'match($0, /Bank([0-9]+)GntR/, nums) { d=nums[1]+7; gsub(/Bank[0-9]+GntR\[/, "Bank" d "GntR["); print }'

这将产生所需的输出。在

这里的重点是match将匹配您的数据,并允许捕获组,您可以使用这些组来提取数字。由于awk支持算术,因此可以在awk中添加7,然后对行其余部分的所有值进行替换。注意,我假设行中的所有值都有相同的数字。在

相关问题 更多 >