web-dev-qa-db-ja.com

「wc -l」を取得して、ファイル名なしで行数​​だけを印刷するにはどうすればよいですか?

wc -l file.txt

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

番号だけが必要です(ファイル名ではありません)。

私がすることができます

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

しかし、おそらくもっと良い方法がありますか?

111
PoGibas

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

wc -l < file.txt
169
Norman Ramsey
cat file.txt | wc -l

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

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

19
pjmorse

先行スペースなしでこれを行うには、次の理由があります。

wc -l < file.txt | bc
12
Desi Cochrane

どう?

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

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

11
Neil Albert

どう?

grep -ch "^" file.txt
4
MeIsMich

テクニックの比較

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は行をカウントするために機能しますが、文字はカウントしません。

bcが最も簡潔であり、awkPerlは少し使い過ぎに見えますが、それらはすべて比較的高速で十分に移植性が高いはずです。

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

3
Beejor

明らかに、これには多くの解決策があります。ただし、ここにもう1つあります。

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

これは行数のみを出力しますが、末尾の改行文字(\n)が存在します。必要ない場合は、[:blank:][:space:]に置き換えます。

2
Bouchaala Reda

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

以下はコマンドです:

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

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

1
user128364