grep マッチング後にファイルの行数を数える方法は?

grep マッチング後にファイルの行数を数える方法は?

CSVファイルで問題のある行の後の行数を数えようとしています。grep -a #一致するものを見つけたら、#行数を出力する構文を使用できることを知っています。実際の行数にのみ興味があります。数値をMAX_INTに設定し、それをファイルにパイプして追加の処理を実行できることに気づきました。

カウントを伝える簡潔な一行の文章を探しています。

どんな提案がありますか?

答え1

{ grep -m1 match; grep -c ''; } <file

grepこれはGNUと可能なinfileで動作しますlseek()。最初の項目はgrep1つのパッチで停止し、-m2番目の項目は-c入力の残りのすべての行を計算します。

GNUなしgrep

{ sed '/match/q'; grep -c ''; } <file

もちろん、grepそれ以上の他のオプションをすべて使用することができ、試合中に停止する必要はありません。

答え2

これは一つの方法です。

$ cat foo
aaa
bbb
ccc
ddd
eee
fff
$ awk '/^ddd/{a=FNR}END{print FNR-a}' foo
2
$

答え3

もう一つのアプローチ -dc使用するのは少し難しいですが、ここではうまくいくようです。

sed -n '/problem/=;$=' prob.txt | dc -e '??r-p'

sedprob.txt「問題」と最後の行を検索し、=コマンドを使用して両方の行の行番号を出力します。

dc両方の値をスタックに読み込み、逆さまに反転し、次の差を引いて印刷します。

答え4

問題のある行まで(および含む)すべての行を削除し、残りの行数を数える必要があります。

sed '1,/problem/d' data.txt | wc -l

関連情報