CSVファイルで問題のある行の後の行数を数えようとしています。grep -a #
一致するものを見つけたら、#行数を出力する構文を使用できることを知っています。実際の行数にのみ興味があります。数値をMAX_INTに設定し、それをファイルにパイプして追加の処理を実行できることに気づきました。
カウントを伝える簡潔な一行の文章を探しています。
どんな提案がありますか?
答え1
{ grep -m1 match; grep -c ''; } <file
grep
これはGNUと可能なinfileで動作しますlseek()
。最初の項目はgrep
1つのパッチで停止し、-m
2番目の項目は-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'
sed
prob.txt
「問題」と最後の行を検索し、=
コマンドを使用して両方の行の行番号を出力します。
dc
両方の値をスタックに読み込み、逆さまに反転し、次の差を引いて印刷します。
答え4
問題のある行まで(および含む)すべての行を削除し、残りの行数を数える必要があります。
sed '1,/problem/d' data.txt | wc -l