#linux #awk #sed
#linux #awk #sed
Вопрос:
Я собрал очень большие данные в .txt
файле, содержащем около 6 тысяч строк, и я хочу сначала изменить строку 3, которая вызывается сейчас n
, и каждую n 6
строку, например 9, 15, 24 и так далее.
Это пример текущего состояния:
domain_name = {'name': 'aaa.pro'
'register': 159.00
'register': 159.00
'register': 159.00
'currency': USD
domain_name = {'name': 'abogado'
'register': 40.50
'register': 40.50
'register': 40.50
'currency': USD
domain_name = {'name': 'academy'
'register': 34.50
'register': 34.50
'register': 34.50
'currency': USD
Я хочу, чтобы результат был примерно таким:
domain_name = {'name': 'aaa.pro'
'register': 159.00
'renew': 159.00
'register': 159.00
'currency': USD
domain_name = {'name': 'abogado'
'register': 40.50
'renew': 40.50
'register': 40.50
'currency': USD
domain_name = {'name': 'academy'
'register': 34.50
'renew': 34.50
'register': 34.50
'currency': USD
Так что строка с номером 3 n
, а затем строки с номерами 9, 15 и так далее (n 6), содержащие register
строку, должны быть заменены на renew
string .
Я прочитал sed
и awk
руководство, но я не понял, как именно этого достичь.
Не могли бы вы мне помочь?
Ответ №1:
Не могли бы вы попробовать следовать.
awk -v n="3" 'FNR==n{sub(/register/,"renew");n =6} 1' Input_file
Объяснение: упоминание -v n="3"
о создании переменной с именем n
, которая имеет значение as 3
. Затем проверьте условие FNR==n
, чтобы увидеть, совпадает ли текущий номер строки с тем, что n
затем перейдите внутрь блока {...}
и используйте sub
регистр замены с обновлением там, затем добавьте 6 к текущему значению n и сохраните его в n
себе. 1
будет напечатана текущая строка.
Ответ №2:
Это может сработать для вас (GNU sed):
sed -i '3~6s/register/renew/' file
Начиная со строки 3 и каждые 6 строк после этого замените renew
register
и отредактируйте файл на месте.