Bashを使用して空行数を計算して表示します。

Bashを使用して空行数を計算して表示します。

ファイルに連続して21行以上の空行が含まれている場合は、エラーメッセージを送信する必要があります。スペースにはスペースを含めることができます。新しいサーバーに切り替えたとき、現在のソリューションが動作を停止しました。私は一度も動作しなかったかもしれませんが、私はさまざまなスクリプトが動作していることを確認する任務を担当しています。スクリプトはBashで書かれているので、理想的にはソリューションはBashで動作します。それ以外の場合は、問題になると思われるスクリプト内で切り替える必要があります。

エラーメッセージには、空白行の前後に行を含める必要があります。

これは以前に使用されたものです:grepを使用して質問の数を計算します(0より大きい場合は電子メールを送信します)。

grep -nc $'[\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a]' filename

問題行の表示(メールに表示)

grep -n $'[\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a]' filename

繰り返しますが、これがうまくいくかどうかわかりません。ただし、正しく機能するようにしてください。私はこれを試してみましたが、計算には働きます...しかし、空白があり、動作する前/後の行を取得できない場合は動作しません。

grep -czoP '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' filename

ベストアンサー1

スクリプトを使用して、awkファイルに特定の数以上の空行があるかどうか、またはスペース(スペースおよび/またはタブ)のみが含まれているかどうかを検出します。

if ! awk -v max=21 '/^[[:blank:]]*$/ { if (++count >= max) exit 1; next } { count = 0 }'
then
    echo 'file contains 21 or more consecutive blank lines'
else
    echo 'file contains no more than consecutive 20 blank lines'
fi <file

これにより、入力ファイルの各行に対して正規表現が^[[:blank:]]*$順番に一致します。この式は、空白行と空白および/またはタブのみを含む行と一致します。式が一致するとカウンタがインクリメントされます。カウンタが指定された最大値(コマンドラインmaxで設定された変数)に達すると、スクリプトはゼロ以外の終了状態で終了します。式が一致しない場合、カウンタはゼロにリセットされます。

おすすめ記事