繁体   English   中英

如何获取第n个匹配的行号?

[英]How to get the line number of nth match?

假设我有以下文件:

* cat
* dog
* cat
* fish
* fish
* cat
* turtle

假设我想为 cat 找到第二个匹配项的行号,我该怎么做?

$ awk '/cat/{c++} c==2{print NR;exit}' file
3

数猫,打印行号,然后在所需的匹配值后退出。

您能否再尝试一次。

awk -v match_number="3" -v value="cat" '$0==value{if(++count==match_number){print FNR;exit}}'  Input_file

或者只搜索不完全匹配的关键字,请尝试:

awk -v match_number="3" -v value="cat" 'index($0,value){if(++count==match_number){print FNR;exit}}' Input_file

您可以根据需要提及match_number变量,假设您需要第3个匹配项,那么在这里提及3 同样,您需要根据需要在整个Input_file中使用字符串来更改value变量的value

awk解决方案的I / O效率更高,但我想指出的是,还有一个纯shell解决方案:

grep -n cat | head -2 | tail -n 1 | cut -d: -f1

随意用cat替换任何其他正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM