grep:注释出现次数

grep:注释出现次数

我有一个格式类似于以下内容的文本文件:

PktType1 Header
PktType1 Pay
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
...

我想做的是 grep 查找所有出现的情况PktType0 Done,然后注释第 N 个出现的情况以及行号。例如:

1 42 PktType0 Done
2 65 PktType0 Done
3 75 PktType0 Done

其中 42、65 和 75 是行号,1、2 和 3 只是出现次数的计数。我想我可以将其写入文件,然后显示行号。但我想知道是否有一个工具可以将其传递给它,它可以做同样的事情。

答案1

如果您想要的不仅仅是模式匹配,还需要使用行号和匹配计数进行其他格式化,那么 Awk 是比 grep 更好的选择

awk '/PktType0 Done/{ print ++count, NR, $0 }' file

答案2

我想知道是否有一个工具可以将其传递给它,它可以做同样的事情。

是的:nl

<log.txt grep -n 'PktType0 Done' | nl

答案3

使用来自另一个答案的示例数据:

$ cat file
PktType0 Done
PktType1 Header
PktType1 Pay
PktType0 Done
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
$ awk '$0 == "PktType0 Done" { print ++count, NR, $0 }' file
1 1 PktType0 Done
2 4 PktType0 Done
3 8 PktType0 Done

awk命令忽略除那些精确等于字符串的行之外的所有行PktType0 Done。它打印计数器的值、当前行号和行本身。

更改$0 == "PktType0 Done"/PktType0 Done/可在任意行的任意位置查找作为子字符串的字符串。

答案4

grep -n conf file |
  sed -Ee 's/^([[:digit:]]*):/\1 /' |
  cat -n

sed步骤是因为grep -n在行号和文本之间放置了一个冒号,这在您想要的输出中没有指出。

相关内容