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

関連情報