Заменить подстроку строки символов другими символами в awk - PullRequest
0 голосов
/ 11 июля 2019

У меня есть файл, который содержит очень длинную строку символов, и я хотел бы заменить его подстроку на Ns.Пример:

test ABCDABCDABCD

Я хотел бы заменить ее подстроку всеми буквами N с помощью команды awk и sed, всех символов от индекса 5 до 8, поэтому общая длина буквыN равно 4.

Вывод

ABCDNNNNABCD

Я пробовал что-то вроде этого:

awk '{ v=substr($0,5,4); sed -i "s/$v/N/g";print substr($0,1,4)""v""substr($0,9,12)}' test

однако, эта команда, похоже, выдает такой вывод:

ABCDABCDABC

И никакая замена не была сделана

Я хотел бы иметь в коде номер индекса, с которого начинается замена (здесь, например, 4) и номер длиныподстановка (здесь также 4), так что я могу просто изменить эти числа в случае, если я хочу начать в другой позиции и для другой длины замещения, потому что в действительности у меня есть строка с тысячами букв, и я хочу заменить сотни символовпоэтому замена шаблона не работает в моем случае

Ответы [ 3 ]

1 голос
/ 11 июля 2019

Вы хотите использовать awk и sed? Похоже, вы действительно хотите один из:

$ echo ABCDABCDABCD | perl -pe 'substr($_,4,4)="NNNN"'
ABCDNNNNABCD
$ echo ABCDABCDABCD | perl -pe 'substr($_,4,4)="N"x4'
ABCDNNNNABCD
0 голосов
/ 12 июля 2019
$ echo 'ABCDABCDABCD' |
    awk -v b=5 -v e=8 '{
        t=substr($0,b,e-b+1); gsub(/./,"N",t); print substr($0,1,b-1) t substr($0,e+1)
    }'
ABCDNNNNABCD
0 голосов
/ 12 июля 2019
echo ABCDABCDABCD | awk '{$0=gensub(/ABCD/,"NNNN",2)}1'
ABCDNNNNABCD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...