假设我有以下文件:
* cat
* dog
* cat
* fish
* fish
* cat
* turtle
假设我要查找第二次匹配cat的行号,该怎么办?
答案 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。