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

时间:2019-07-15 16:58:38

标签: bash awk grep numbers line

假设我有以下文件:

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

假设我要查找第二次匹配cat的行号,该怎么办?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

请您尝试一次。

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。同样,您可以根据需要更改value变量的值,并在整个Input_file中查找字符串。

答案 2 :(得分:0)

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

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

可以用任何其他正则表达式替换cat。

相关问题