[英]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.