2012-04-19 27 views
77
wc -l file.txt 

kết quả đầu ra số dòng và tên tệp.Cách lấy "wc -l" để in chỉ số dòng mà không có tên tệp?

Tôi chỉ cần số điện thoại (không phải tên tệp).

tôi có thể làm điều này

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

Nhưng có lẽ có một cách tốt hơn?

+10

' wc -l

+0

Bản sao có thể có của [chỉ lấy số nguyên từ wc trong bash] (http://stackoverflow.com/questions/3746947/get-just-the-integer-from-wc-in-bash) –

Trả lời

126

Hãy thử cách này:

wc -l < file.txt 
+1

Trong AIX, ksh, điều này sẽ luôn có một dấu cách trước số đó. Chúng ta phải sử dụng | awk '{print $ 1}' hoặc cắt, để cắt bỏ các khoảng trống. Một cách khác để cắt sẽ là kèm theo một tiếng vang. – rao

+0

@rao là chính xác, điều này sẽ thêm một dấu cách trước số đó. Giải pháp của tôi giải quyết điều này và đơn giản hơn là bị lúng túng hoặc bị cắt. –

+0

@rao Không có không gian với bash. Không gian đến từ đâu trong ksh? 'wc -l' không được phát ra, và tại sao ksh sẽ thêm đầu vào tiêu chuẩn của một chương trình với một khoảng trắng? –

15
cat file.txt | wc -l 

Theo the man page (đối với phiên bản BSD, tôi không có một phiên bản GNU để kiểm tra):

Nếu không có tập tin được chỉ định, đầu vào tiêu chuẩn được sử dụng và không có tập tin tên được hiển thị là . Lời nhắc sẽ chấp nhận đầu vào cho đến khi nhận EOF hoặc [^ D] trong hầu hết các môi trường.

+2

Tôi không thích mèo - ghép nối tiêu tốn nhiều thời gian. – PoGibas

+8

'wc -l pjmorse

+0

@user: Kiểm tra nó. Bởi đến nay phần chậm nhất sẽ được đọc các tập tin tắt đĩa. – sarnold

8

Làm thế nào về

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

tức là ống đầu ra của wc vào cut (nơi delimiters là không gian và chỉ chọn các trường đầu tiên)

+3

điều này không tốt hơn so với tệp 'wc -l file.txt | awk '{print $ 1}' 'OP đã thử. – doubleDown

+0

Nhanh hơn phương thức 'wc -l

4

Còn khoảng

grep -ch "^" file.txt 
+1

Tuyệt. Sử dụng 'grep' rất độc đáo/sáng tạo nhưng kiểm tra điều này (không ngạc nhiên) là 2x đến 6x chậm hơn phương pháp' wc' đơn giản/đơn giản trong các bài kiểm tra của tôi. – arielf

7

Để thực hiện điều này mà không có không gian hàng đầu, tại sao không:

wc -l < file.txt | bc 
+0

Tôi nhận được lỗi cú pháp với điều này (Ubuntu 14.04). Tôi nghĩ rằng có một vấn đề với tên tập tin. – MERose

+0

Trên RHEL 6.7 nó làm tăng lỗi: $ wc -l file.csv | bc (standard_in) 1: lỗi cú pháp (standard_in) 1: ký tự không hợp lệ: N (standard_in) 1: lỗi cú pháp (standard_in) 1: lỗi cú pháp –

+1

Tôi cũng gặp lỗi phân tích cú pháp, nhưng bạn có thể kết hợp điều này với câu trả lời khác để sử dụng 'wc -l jangosteve

2

Rõ ràng, có rất nhiều các giải pháp cho việc này. Dưới đây là một số khác mặc dù:

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

này chỉ kết quả đầu ra số dòng, nhưng kí tự xuống dòng trailing (\n) là hiện nay, nếu bạn không muốn điều đó một trong hai, thay thế [:blank:] với [:space:].

0

Cách tốt nhất sẽ là trước hết tìm tất cả các file trong thư mục sau đó sử dụng NR AWK (Số Variable Records)

dưới đây là lệnh:

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

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

Các vấn đề liên quan