Member 13777735 Ответов: 1

Как искать строку на основе ее позиции разделителя в UNIX


Input : a=ABCD~BCDA~BABD~CACD~CICD~DEFG
Searching String : BABD
Output: 2

As per the above input i have a string with delimiter '~'.

Here, I want to get the delimiter position according to any of the search string from the input string.

Could anyone please help me out from it.


In case of unknown delimiters, how could i manage? Is a code can check multiple delimiters at a single go?


Что я уже пробовал:

I have tried with the below code but not able to find the delimiter's position.

echo $a |awk -v s="BABD" '{print index($1,s)}' 

Output: 11 instead of 2

Peter_in_2780

Уродливый, грубый подход: получите "11", как вы это сделали, а затем подсчитайте разделители в этой большой части входной строки.

Mohibur Rashid

Кпалини дал вам ответ.
Вы тоже можете попробовать perl :) все (я не знаю ни одного исключения) дистрибутивы linux поставляются с perl.

Member 13777735

Да, да. Спасибо за ваше предложение.

1 Ответов

Рейтинг:
5

CPallini

Этот

awk -F "~" 'BEGIN{RS=FS}/BABD/{print NR-1}' <<< 'ABCD~BCDA~BABD~CACD~CICD~DEFG'
работает на меня (см. На awk число подходящий шаблон на переполнение стека[^]).


Member 13777735

Спасибо. Это сработало для меня.

Member 13777735

У меня есть и другие сомнения.

Предположим, у меня есть около 4 разделителей, таких как - '~','|','^|' и"^", и я не могу подозревать, какой разделитель придет для конкретного запуска, тогда как я мог бы решить этот вопрос.

Я просто хотел знать в этом коде, как я буду использовать несколько разделителей.

CPallini

В AWK можно использовать несколько разделителей. Смотрите, например
https://stackoverflow.com/questions/12204192/using-multiple-delimiters-in-awk
Неясно, нужны ли они вам или нет (то есть: нужно ли вам несколько разделителей за один прогон?).

Member 13777735

Как я мог бы справиться с несколькими разделителями, такими как <"~", "|", "^" и "^|"> в этом коде,

на awk -F " и~" 'начать{РС=ПС}/BABD/{печати НР-1}' &ЛТ;&ЛТ;&ЛТ; 'АБВГД~BCDA~BABD~ЦАЦД~CICD~DEFGБЫЛ'

Поскольку код использует только один разделитель, упомянутый в нем.

Member 13777735

Я получил ответ. Спасибо всем.