2012-10-04 27 views
9

thể trùng lặp:
bash echo number of lines of file given in a bash variablesố Output các dòng trong một file văn bản để sàng lọc trong Unix

Đã tự hỏi làm thế nào bạn ra số dòng trong một file văn bản để sàng lọc và sau đó lưu trữ nó trong một biến. Tôi có một tập tin gọi là stats.txt và khi tôi chạy wc -l stats.txt nó ra 8 stats.txt

Tôi đã thử làm x = wc -l stats.txt nghĩ nó sẽ lưu trữ số duy nhất và phần còn lại là chỉ dành riêng cho thị giác nhưng nó không hoạt động :(

thanks for the help

+2

Làm thế nào về 'x = $ (wc -l

+0

Hướng dẫn bash có thể giúp bạn: http://tldp.org/LDP/Bash-Beginners-Guide/html/ –

Trả lời

2

bạn có thể thử:

x=`cat stats.txt | wc -l` 

hoặc (từ bình luận của another.anon.coward):

x=`wc -l < stats.txt` 
+1

Bạn có thể làm điều đó với 'cat' & pipe là' x = $ (wc -l

+0

@gokcehan khi tôi chạy nó ---- cat coursefile.txt | wc -l ----- nó hoạt động. Tuy nhiên khi tôi cố gắng lưu trữ nó, tôi nhận được một lỗi: -bash: x: lệnh không tìm thấy – Masterminder

+0

đừng quên backticks ('') – none

16

Có hai POSIX tiêu chuẩn cú pháp để thực hiện điều này:

x=`cat stats.txt | wc -l` 

hoặc

x=$(cat stats.txt | wc -l) 

Cả hai đều chạy chương trình và thay thế gọi trong kịch bản với sản lượng tiêu chuẩn của lệnh, trong trường hợp này, gán nó cho biến số $x. Tuy nhiên, hãy lưu ý rằng cả hai kết thúc cắt dòng mới (đây thực sự là những gì bạn muốn ở đây, nhưng đôi khi có thể nguy hiểm, khi bạn mong đợi một dòng mới).

Ngoài ra, trường hợp thứ hai có thể dễ dàng lồng nhau (ví dụ: $(cat $(ls | head -n 1) | wc -l)). Bạn cũng có thể làm điều đó với trường hợp đầu tiên, nhưng nó phức tạp hơn:

`cat \`ls | head -n 1\` | wc -l` 

Ngoài ra còn có vấn đề báo giá. Bạn có thể bao gồm các biểu thức bên trong dấu nháy kép, nhưng với back-ve, bạn phải tiếp tục trích dẫn bên trong lệnh, trong khi sử dụng dấu ngoặc đơn cho phép bạn "bắt đầu một trích dẫn mới" nhóm:

"`echo \"My string\"`" 
"$(echo "My string")" 

Hope this helps =)

+0

cảm ơn sự giúp đỡ – Masterminder

+2

Không cần thiết cho 'mèo' hoặc bất kỳ chuyển hướng/ống nào - chỉ cần làm: x = $ (wc -l /path/to/file.txt) –

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