文字列の空白文字数を取得しますか?

文字列の空白文字数を取得しますか?

\tファイルの最初の行に空白( ''、)がいくつあるかどうかを確認するには?

答え1

簡単な方法は、最初の行だけを選択し、空白以外の文字を削除して、残りの文字数を数えることです。

head -n 1 | tr -cd ' \t' | wc -c

答え2

awk '{print gsub("[ \t]",""); exit}' < file

または、スペースとタブだけでなく、すべてのスペース(水平間隔文字)を計算します。

awk '{print gsub("[[:blank:]]",""); exit}' < file

答え3

GNU sedを使用して組み合わせを置き換えることができますhead|tr(これはPOSIXLY_CORRECTが環境にないと仮定します)。

sed '1s/[^ \t]//g' |wc -c

メモ:sedは常に改行文字を印刷するので、改行自体の数を含みます。 どのように動作しますか?s///:sedでは、コマンドにアドレス範囲を指定できます。ここでは最初の行にすぎません。空白以外のすべての空白を nul でグローバルに置き換え、wc文字数の計算結果を印刷します。

計算を実行する純粋なsedバージョンを見つけることは可能ですが、見苦しいです。

Perlのバージョンも簡単です。

perl -lne 's/[^ \t]//g;print length($_);last'

原理は同じです。この-lオプションは末尾の改行を出力します。この-nオプションは、巨大なwhile-readlineループでスクリプトをラップします。そしてlastサイクルを終了します。

StéphaneのawkソリューションはPerlを使ってこれを行うことができることを思い出させます。

perl -lne 'print s/[[:space:]]]//g;last'

[[:blank:]]または、改行やその他の印刷できない文字に置き換えてください。

答え4

perl -nE '$n = tr/ / /; say $n; exit' file

関連情報