#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