it-mot-dan-vi.com

đếm số dòng trong một tập tin

Tôi chắc chắn có nhiều cách để làm điều này: làm thế nào tôi có thể đếm số dòng trong một tệp văn bản?

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

Cách tiêu chuẩn là với wc, dùng các đối số để chỉ định những gì cần đếm (byte, ký tự, từ, v.v.); -l là dành cho dòng:

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

Như Michael đã nói, wc -l là con đường để đi. Nhưng, chỉ trong trường hợp bạn không thể giải thích được có bash, Perl hoặc awk chứ không phải wc, đây là một vài giải pháp nữa:

Chỉ Bash

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

Giải pháp Perl

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

và ít có thể đọc được:

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

Giải pháp Awk

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

Steven D đã quên GNU sed:

sed -n '$=' file.txt

Ngoài ra, nếu bạn muốn đếm mà không xuất tên tệp và bạn đang sử dụng wc:

wc -l < file.txt

Chỉ vì cái quái quỷ của nó:

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

Lời cảnh báo khi sử dụng

wc -l

bởi vì wc -l hoạt động bằng cách đếm\n, nếu dòng cuối cùng trong tệp của bạn không kết thúc ở dòng mới một cách hiệu quả thì số dòng sẽ bị tắt bởi 1. (do đó, quy ước cũ sẽ bỏ dòng mới ở cuối tệp của bạn)

Vì tôi không bao giờ có thể chắc chắn liệu có bất kỳ tệp đã cho nào tuân theo quy ước kết thúc dòng cuối cùng bằng một dòng mới hay không, tôi khuyên bạn nên sử dụng bất kỳ lệnh thay thế nào sẽ bao gồm dòng cuối cùng trong số bất kể dòng mới hay không.

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

Trong trường hợp bạn chỉ có bash và hoàn toàn không có công cụ bên ngoài nào, bạn cũng có thể làm như sau:

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

Giải thích: vòng lặp đọc dòng đầu vào tiêu chuẩn theo dòng (read; vì dù sao chúng tôi không làm gì với đầu vào đọc, nên không có biến nào được cung cấp để lưu trữ) và tăng biến count mỗi lần . Do chuyển hướng (<file.txt sau done), đầu vào tiêu chuẩn cho vòng lặp là từ file.txt.

3
celtschk

Bạn luôn có thể sử dụng lệnh grep như sau:

grep -c "^" file.txt

Nó sẽ đếm tất cả các hàng thực tế của file.txt, cho dù hàng cuối cùng của nó có chứa a LF ký tự ở cuối hay không.

2
Paolo