Смещение байта Grep в последовательных строках конвейерного вывода

#bash #grep

#bash #grep

Вопрос:

Я пытаюсь экспортировать смещение в байтах определенного символа в каждой строке конвейерного ввода. Например, вывод 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 .

Однако это только смещает выходные данные и сохраняет совокупные смещения байтов всех «А».

т.е.

 11:A
21:A
33:A
  

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

Ответ №1:

 while read -r line; do grep -ob 'A' <<< "$line"; done < abc.txt
  

Вывод:

10:A
9: A
11:A

Ответ №2:

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

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

$ perl -lne 'print index($_, "A")' ip.txt
10
9
11
  

Ответ №3:

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

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

вывод:

 10
9
11