\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