sed awk grep?找到确切的行号

时间:2014-11-25 06:11:32

标签: regex bash awk sed grep

这是我的datafile.txt

的示例
jones
dave
mike
dave
nathan
ben
james
jim
dave
dave
jones
bill
john

我正在使用grep查找字符串dave,这很好

grep "dave" datafile.txt >> duplicate.txt

我需要找到找到字符串dave的哪一行#

第一场比赛dave在#2上线 下一个dave在#4上线 下一个dave在#9上线 下一个dave位于#10

2nd查询以查找最后一次出现之间的行数

所以第一场比赛是0
第二场比赛是在2行之后 第三场比赛是在5行之后 第四场比赛是在1

之后

所以需要知道确切的行号和行号

1 个答案:

答案 0 :(得分:2)

简单的awk可以为你做的工作

$ awk '/dave/{print NR}' input
2
4
9
10

它的作用

  • /dave/匹配<{p>

  • 行上的/dave/
  • {print NR}打印NR,行号。

并且

$ awk '/dave/{print prev?NR-prev:0; prev=NR}' input
0
2
5
1

它的作用是什么?

  • prev变量包含与/dave/匹配的上一行

  • prev?NR-prev:0如果设置了prev,则打印NR-prev否则打印0

  • prev=NRprev设为当前NR