wc -l file.txt
行数とファイル名を出力します。
(ファイル名ではなく)番号自体が必要です。
私がすることができます
wc -l file.txt | awk '{print $1}'
しかし、もっと良い方法があるのでしょうか?
wc -l file.txt
行数とファイル名を出力します。
(ファイル名ではなく)番号自体が必要です。
私がすることができます
wc -l file.txt | awk '{print $1}'
しかし、もっと良い方法があるのでしょうか?
回答:
この方法を試してください:
wc -l < file.txt
wc -l
それを出力すべきではありません、そしてなぜkshはプログラムの標準出力にスペースを付加するのですか?
4711 [stdin]
、出力として次のようなものを期待します。
printf "%'d"
。これにより、スペースが処理され、大きな数値が適切に出力されます。
cat file.txt | wc -l
manページによると(BSDバージョンの場合、チェックするGNUバージョンはありません):
ファイルを指定しないと、標準入力が使用され、ファイル名は表示されません。プロンプトは、EOFを受信するまで入力を受け入れます。ほとんどの環境では[^ D]です。
wc -l < file.txt
同じ効果があります。
wc -l < file.txt
、猫の無駄な使用を避けるために使用します。目立った時間を費やしていると思うなら、あなたは絶対に気が狂っていますが。
先行スペースなしでこれを行うには、なぜですか:
wc -l < file.txt | bc
wc -l < file.txt
、解析エラーを修正してスペースを削除するには:wc -l < file.txt | bc
いかがですか
wc -l file.txt | cut -d' ' -f1
つまり、出力をwc
にパイプしますcut
(区切り文字はスペースで、最初のフィールドのみを選択します)
wc -l file.txt | awk '{print $1}'
OPが試したものよりも優れています。
wc -l < file.txt
メソッドよりも高速です。ただし| cut -d' ' -f2
、wc
コマンドが先頭のスペースを返す限り、BSDで使用する必要があります。例:「34068289 file.txt」の代わりに「34068289 file.txt」。
同様の問題があり、によって提供される先行空白なしで文字カウントを取得しようとしたため、wc
このページが表示されました。ここで答えを試した後、以下はMac(BSD Bash)での個人的なテストの結果です。繰り返しますが、これは文字数をカウントするためのものです。行のためにあなたがしたい数えますwc -l
。echo -n
末尾の改行を省略します。
FOO="bar"
echo -n "$FOO" | wc -c # " 3" (x)
echo -n "$FOO" | wc -c | bc # "3" (√)
echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√)
echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√)
echo -n "$FOO" | wc -c | perl -pe 's/^\s+//' # "3" (√)
echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x)
echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
cut -f*
特定の出力に含まれる可能性のある先行スペースの正確な数を知っている必要があるため、私は一般的にこの方法に依存しません。そして、grep
1つは行を数えるために機能しますが、文字には機能しません。
bc
最も簡潔で、awk
かつperl
ビットやり過ぎのように見えるが、彼らはすべて比較的高速、ポータブル十分なはずです。
また、これらの一部は、一般的な文字列から周囲の空白を削除するように調整できることにも注意してください(echo `echo $FOO`
別の巧妙なトリックとともに)。
echo `echo $FOO`;
て、変数に対するString.trim()コマンドのように動作します!それは驚くほど便利です。また、私の回答にあなたの行を追加します。
printf
よりも優れていecho
ますか?
明らかに、これには多くの解決策があります。ここにもう一つあります:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
これは、行数を出力しますが、末尾の改行文字は(\n
)あなたはどちらかそれをしたくない場合は、交換してください、存在している[:blank:]
と[:space:]
。
test9
、その中に1行で、出力は19になります
最善の方法は、まずディレクトリ内のすべてのファイルを見つけてから、AWK NR(レコード数変数)を使用することです
以下はコマンドです:
find <directory path> -type f | awk 'END{print NR}'
例:- find /tmp/ -type f | awk 'END{print NR}'
wc -l < file.txt
正確かつ簡潔に仕事をします。