it-swarm-ja.tech

ファイル内の行を数える

これを行う方法はたくさんあると思います。テキストファイルの行数を数えるにはどうすればよいですか。

$ <cmd> file.txt
1020 lines
75
Chris Smith

標準的な方法はwcを使用する方法で、引数を取り、カウントするもの(バイト、文字、単語など)を指定します。 -lは行です:

$ wc -l file.txt
1020 file.txt
109
Michael Mrozek

マイケルが言ったように、wc -lは進むべき道です。ただし、bashPerl、またはawkは不可解な場合がありますが、wcはありません。いくつかの解決策を次に示します。

バッシュのみ

$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT

Perlソリューション

$ Perl -lne 'END { print $. }' file.txt

そしてはるかに読みにくい:

$ Perl -lne '}{ print $.' file.txt

Awkソリューション

$  awk 'END {print NR}' file.txt
17
Steven D

スティーブンDは忘れましたGNU sed

sed -n '$=' file.txt

また、ファイル名を出力せずにカウントが必要で、wcを使用している場合:

wc -l < file.txt

ちょうどそのために:

cat -n file.txt | tail -n 1 | cut -f1

使用時の注意事項

wc -l

wc -lは\ nを数えることによって機能するため、ファイルの最後の行が改行で効果的に終了しない場合、行数は1だけずれます(したがって、古い規則により、ファイルの最後に改行が残ります)。

特定のファイルが最後の行を改行で終了するという慣習に従っているかどうかわからないため、改行の有無に関係なく、最後の行をカウントに含めるこれらの代替コマンドを使用することをお勧めします。

sed -n $= filename
Perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
11
pretzels1337

Bashしかなく、外部ツールがまったくない場合は、次のこともできます。

count=0
while read
do
  ((count=$count+1))
done <file.txt
echo $count

説明:ループは標準入力を1行ずつ読み取り(read;読み取り入力には何もしないので、それを格納するための変数は提供されていません)、変数countを毎回増やします。リダイレクト(<file.txtdoneの後)、ループの標準入力はfile.txt

3
celtschk

次のように、コマンドgrepをいつでも使用できます。

grep -c "^" file.txt

最後の行の末尾にLF文字が含まれているかどうかに関係なく、file.txtの実際のすべての行がカウントされます。

2
Paolo