管道输出的连续行中的Grep字节偏移

时间:2019-04-02 01:23:13

标签: 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所述。

但是,这只会偏移输出,并保留所有'A'的累积字节偏移。

即。

11:A
21:A
33:A

我缺少选择吗? 任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

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

输出:

10:A
9:A
11:A

答案 1 :(得分:3)

如果您只需要偏移量:

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

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

答案 2 :(得分:1)

无需多次grep调用。如果您的grep版本支持P选项,则可以执行以下操作:

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

输出:

10
9
11