gpt4 book ai didi

bash - 当每行存在多个匹配项时,如何打印模式的行号和起始位置?

转载 作者:行者123 更新时间:2023-12-05 09:29:04 27 4
gpt4 key购买 nike

我想使用 awk 来匹配一个大文件中出现的所有模式。对于每场比赛,我想打印行号和图案沿行的起始位置(某种 xy 坐标)。每行中出现几次该模式。我找到了 this有点相关的问题。

到目前为止,我设法只对每行中的第一个(最左边)出现的地方执行此操作。例如:

echo xyzABCdefghiABCdefghiABCdef | awk 'match($0, /ABC/) {print NR, RSTART } ' 

结果输出是:

1 4

但我期望的是这样的:

1 4
1 13
1 22

我尝试使用拆分而不是匹配。我设法识别所有事件,但 RSTART 丢失并打印为“0”。

echo xyzABCdefghiABCdefghiABCdef | awk ' { split($0,t, /ABC/,m) ; for (i=1; i in m; i++) print (NR, RSTART) } '

输出:

1 0
1 0
1 0

如有任何建议,我们将不胜感激。我不限于使用 awk,但 awk 解决方案将不胜感激。此外,在我的例子中,要匹配的模式将是一个正则表达式 (/A.C/)。谢谢

最佳答案

这可能是您想要做的:

echo xyzABCdefghiABCdefghiABCdef | 
awk '{ begpos=1
while (match(substr($0, begpos), /ABC/)) {
print NR, begpos + RSTART - 1
begpos += RLENGTH + RSTART - 1
}
}'

关于bash - 当每行存在多个匹配项时,如何打印模式的行号和起始位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70856028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com