2013-05-14 36 views
13

Tôi nhận được kết quả sai từ lệnh wc -l. Sau một chặng đường dài :(kiểm tra một tìm thấy cốt lõi của vấn đề, đây là mô phỏng:.?wc -l cho kết quả sai

$ echo "line with end" > file 
$ echo -n "line without end" >>file 
$ wc -l file 
     1 file 

đây là hai dòng, nhưng thiếu người cuối cùng "\ n" Bất cứ giải pháp dễ dàng

+0

bất kỳ lý do nào để sử dụng 'echo -n' và tại sao bạn không thể thêm' \ n' vào cuối 'echo -n'? – Bill

+1

Ở trên là ** SIMULATION ** của sự cố. Tôi không tạo các tệp, chỉ làm việc với chúng. Tôi đã nhận được chúng mà không có lần nhập cuối cùng. – novacik

+3

Không sử dụng một tuốc nơ vít để lái xe trong móng tay khi có một cái búa trong bộ công cụ của bạn :-) Bạn có thể _think_ đó là hai dòng nhưng doco cho 'wc' không đồng ý. – paxdiablo

Trả lời

16

Đối với dòng wc là những gì kết thúc với "\ n" char. Một trong những giải pháp là grep-ing các dòng. Grep không tìm kiếm NL kết thúc.

ví dụ:

$ grep -c . file  #count the occurrence of any character 
2 

ở trên sẽ không tính các dòng trống. Nếu bạn muốn, hãy sử dụng các số

$ grep -c '^' file  #count the beginnings of the lines 
2 
12

từ người đàn ông trang của trang man wc

-l, --lines 
       print the newline counts 

hình thức echo

-n  do not output the trailing newline 

để bạn có 1newline trong tệp của mình và do đó wc -l hiển thị 1.

Bạn có thể sử dụng awk lệnh sau để đếm dòng

awk 'END{print NR}' file 
Các vấn đề liên quan