Grep смещение байта в последовательных строках конвейерного вывода - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь экспортировать байтовое смещение определенного символа в каждой строке входного канала. Например, вывод abc.txt:

....gugucaA....
.....guauAgggu..
.....ggguguAau..

должен вернуть:

11:A
10:A
12:A

Я пытался использовать:

cat abc.txt | while read -r line; do grep -aob 'A'; done

Как объяснено здесь https://unix.stackexchange.com/a/7561/327888.

Тем не менее, это только смещает вывод и сохраняет совокупное смещение байтов всех символов A.

т.

11:A
21:A
33:A

Я пропускаю опцию? Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

3 голосов
/ 02 апреля 2019

Если вам просто нужно смещение:

$ awk '{print index($0, "A")-1}' ip.txt
10
9
11

$ perl -lne 'print index($_, "A")' ip.txt
10
9
11
3 голосов
/ 02 апреля 2019
while read -r line; do grep -ob 'A' <<< "$line"; done < abc.txt

Выход:

10:A
9:A
11:A
1 голос
/ 02 апреля 2019

Нет необходимости в нескольких вызовах grep.Если ваша версия grep поддерживает опцию P, вы можете сделать:

grep -Po "[^A ]+(?=A)" inputfile | awk '{print length}'

output:

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