「wc -l」でファイル名なしの行数だけを出力する方法は?


154
wc -l file.txt

行数とファイル名を出力します。

(ファイル名ではなく)番号自体が必要です。

私がすることができます

 wc -l file.txt | awk '{print $1}'

しかし、もっと良い方法があるのでしょうか?


13
wc -l < file.txt正確かつ簡潔に仕事をします。
ジョナサンレフラー


3
これは、私が2度調べた質問です。このwcの動作は、-nixの通常の簡潔さに対して直感的でなくパラダイムに反しています。ふわふわした冗長性のすべての種類を回避したくないので、その簡潔さには理由があります。結局のところ、ファイル名はわかりますよね。私が欲しいのは行数です。
ピーター-モニカを復活させる

回答:


216

この方法を試してください:

wc -l < file.txt

5
AIX、kshでは、これは常に数値の前にスペースがあります。私たちは使用しなければなりません| awk '{print $ 1}'またはカット。スペースを削除します。トリミングする別の方法は、エコーで囲むことです。
rao 2014

@raoは正しいです。これにより、数値の前にスペースが追加されます。私のソリューションはこれを解決し、awkやcutよりも簡単です。
デジコクラン2015

@rao bashにはスペースがありません。スペースはkshのどこから来るのですか?wc -lそれを出力すべきではありません、そしてなぜkshはプログラムの標準出力にスペースを付加するのですか?
ピーター-モニカの復活2017

これは正しい回避策です(そして、wcが修正されないようにするのは簡単です)が、遅く、直感的ではありません。まず4711 [stdin]、出力として次のようなものを期待します。
ピーター-モニカを

また、とのペアリングも検討してくださいprintf "%'d"。これにより、スペースが処理され、大きな数値が適切に出力されます。
レオ

21
cat file.txt | wc -l

manページによると(BSDバージョンの場合、チェックするGNUバージョンはありません):

ファイルを指定しないと、標準入力が使用され、ファイル名は表示されません。プロンプトは、EOFを受信するまで入力を受け入れます。ほとんどの環境では[^ D]です。


3
私は猫が好きではありません-連結は多くの時間を消費します。
PoGibas

9
wc -l < file.txt同じ効果があります。
pjmorse 2012

@ユーザー:テストしてください。最も断然遅い部分はディスクからファイルを読むことです。
サルノルド2012

11
@ user1286528はwc -l < file.txt、猫の無駄な使用を避けるために使用します。目立った時間を費やしていると思うなら、あなたは絶対に気が狂っていますが。
ホッブ

12

先行スペースなしでこれを行うには、なぜですか:

wc -l < file.txt | bc

これで構文エラーが発生します(Ubuntu 14.04)。ファイル名に問題があると思います。
MERose、2015

RHEL 6.7では、エラーが発生します。$ wc -l file.csv | bc(standard_in)1:構文エラー(standard_in)1:不正な文字:N(standard_in)1:構文エラー(standard_in)1:構文エラー
Rodrigo Hjort

3
私はまた、パースエラーが出るが、あなたが使用する他の回答でこれを組み合わせることができwc -l < file.txt、解析エラーを修正してスペースを削除するには:wc -l < file.txt | bc
jangosteve

11

いかがですか

wc -l file.txt | cut -d' ' -f1

つまり、出力をwcにパイプしますcut(区切り文字はスペースで、最初のフィールドのみを選択します)


4
これは、wc -l file.txt | awk '{print $1}'OPが試したものよりも優れています。
doubleDown 2013

1
wc -l < file.txtメソッドよりも高速です。ただし| cut -d' ' -f2wcコマンドが先頭のスペースを返す限り、BSDで使用する必要があります。例:「34068289 file.txt」の代わりに「34068289 file.txt」。
Sopalajo de Arrierez 2018年

@doubleDownよく、awkを使用することは、鋸の代わりにCNCマシンを使用してボードを切断することに似ています。のこぎりを使用して切断します。
ピーター-モニカを

5

テクニックの比較

同様の問題があり、によって提供される先行空白なしで文字カウントを取得しようとしたため、wcこのページが表示されました。ここで答えを試した後、以下はMac(BSD Bash)での個人的なテストの結果です。繰り返しますが、これは文字数をカウントするためのものです。行のためにあなたがしたい数えますwc -lecho -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*特定の出力に含まれる可能性のある先行スペースの正確な数を知っている必要があるため、私は一般的にこの方法に依存しません。そして、grep1つは行を数えるために機能しますが、文字には機能しません。

bc最も簡潔で、awkかつperlビットやり過ぎのように見えるが、彼らはすべて比較的高速、ポータブル十分なはずです。

また、これらの一部は、一般的な文字列から周囲の空白を削除するように調整できることにも注意してください(echo `echo $FOO`別の巧妙なトリックとともに)。


1
echo $(printf '%s' "$FOO" | wc -c)echoコマンドsubshitutionが役に立たないまれな状況の 1つです。
tripleee

@tripleee Whoa ...コードに基づいecho `echo $FOO`;て、変数に対するString.trim()コマンドのように動作します!それは驚くほど便利です。また、私の回答にあなたの行を追加します。
Beejor

おそらく、コンテキストについては、シェル変数を引用符で囲む
タイミング


4

いかがですか

grep -ch "^" file.txt

3
いいね。非常に独創的/創造的な使用ですgrepが、これを確認すると、(当然のことながら)wcテストの単純な方法よりも2倍から6倍遅いことがわかります。
arielf

3

明らかに、これには多くの解決策があります。ここにもう一つあります:

wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"

これは、行数を出力しますが、末尾の改行文字は(\n)あなたはどちらかそれをしたくない場合は、交換してください、存在している[:blank:][:space:]


これには、ファイル名に番号が含まれている場合に問題があります。例えば、ファイルのためにtest9、その中に1行で、出力は19になります
ラファエルアーレンス

1

最善の方法は、まずディレクトリ内のすべてのファイルを見つけてから、AWK NR(レコード数変数)を使用することです

以下はコマンドです:

find <directory path>  -type f | awk  'END{print NR}'

例:- find /tmp/ -type f | awk 'END{print NR}'


0

これは、通常のを使用して私の作品wc -lsed数ではありませんどのような任意の文字を削除します。

wc -l big_file.log | sed -E "s/([a-z\-\_\.]|[[:space:]]*)//g"

# 9249133
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.