csvファイルの問題のある行の後の行数をカウントしようとしています。grep -a #
一致が検出された後、#行数を出力する構文を使用できることを認識しています。実際の行数にのみ興味があります。数値をMAX_INTに設定し、それをファイルにパイプして、さらに処理を行うことができることに気付きました。
カウントを伝えるための簡潔なワンライナーを探しています。
助言がありますか?
csvファイルの問題のある行の後の行数をカウントしようとしています。grep -a #
一致が検出された後、#行数を出力する構文を使用できることを認識しています。実際の行数にのみ興味があります。数値をMAX_INTに設定し、それをファイルにパイプして、さらに処理を行うことができることに気付きました。
カウントを伝えるための簡潔なワンライナーを探しています。
助言がありますか?
回答:
{ grep -m1 match; grep -c ''; } <file
これはGNU grep
とlseek()
有能なinfileで動作します。最初はgrep
1つので停止する-m
ATCH、及び第二のあろう-c
入力に残っているすべての行をount。
GNUなしgrep
:
{ sed '/match/q'; grep -c ''; } <file
もちろん、w / grep
あなたは他のオプションのいずれか/すべてを使用することができます、そして1試合で停止することは全く必要ありません。
grep -m1 match >/dev/null
もちろん、最初の一致のプリントアウトをドロップできます。2番目の問題はGNU sed
です。仕様ごとに入力オフセットをリセットしません。-u
GNU を使用する必要があります-これは常に望ましいとは限りません。もっと明確にできたかもしれませんが、私の仮定は、GNU grep
とGNU sed
はペアで提供されるということでした。私はまた、リダイレクトgrep -qm1
を短縮するために働くことができると思います/dev/null
-しかし、GNU grep
は奇妙なことw /を-q
行い、これら2つがどのように連携するか思い出せません。
wc -l
はありませんが、の場合よりも少し安いと思いgrep -c ''
ます。
これが一つの方法です。
$ cat foo
aaa
bbb
ccc
ddd
eee
fff
$ awk '/^ddd/{a=FNR}END{print FNR-a}' foo
2
$