Извлечение каждой строки из файла и передача ее в виде переменной в цикл foreach. - PullRequest
2 голосов
/ 07 июня 2011

Может ли кто-нибудь помочь мне найти простой способ сделать это с помощью любого сценария?Я буду запускать скрипт в 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) Мне нужно изменить содержимое файла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] ),

Так что я должен:

  1. читать каждую строку из файла1,
  2. использовать «поиск» с использованием регулярного выражения,
  3. для соответствия Банку [0-9] GntR,
  4. заменить \ 1 на "7 добавлено к найденному номеру",
  5. вставить его обратно в строку,
  6. запишите строку в новый файл.

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Как на счет этого в 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))
0 голосов
/ 07 июня 2011

Предполагая, что вам не нужно использовать 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 поддерживает арифметику, вы можете добавить 7 в awk и затем заменить все значения в оставшейся части строки. Обратите внимание, я предположил, что все значения в строке имеют одинаковую цифру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...