Tôi đã sử dụng lệnh wc -c để đếm số lượng ký tự nhưng nó cho tôi một số sai, số ký tự cộng với một ký tự làm ví dụ:
echo "k" | wc -c
nó cho tôi 2 ký tự
vậy tại sao không phải là 1?
Tôi đã sử dụng lệnh wc -c để đếm số lượng ký tự nhưng nó cho tôi một số sai, số ký tự cộng với một ký tự làm ví dụ:
echo "k" | wc -c
nó cho tôi 2 ký tự
vậy tại sao không phải là 1?
Câu trả lời:
Hãy xem thông báo trợ giúp cho wc
. Các -c
tùy chọn in ra số ký tự. Các echo
lệnh bao gồm một ký tự xuống dòng theo mặc định. Khi wc
nhìn thấy dòng mới, nó sẽ tính nó như một ký tự khác và do đó tính thêm vào kết quả của bạn. Bạn có thể khắc phục điều này bằng cách sử dụng một trong những lựa chọn thay thế được hiển thị bên dưới; -w
đếm số lượng từ và -l
đếm số dòng.
echo "k" | wc -w
echo "k" | wc -l
Bạn có thể đường ống đầu ra của wc
để awk
để có được số ký tự không bao gồm các ký tự xuống dòng:
wc <filename> | awk '{print $3-$1}'
Đầu ra mặc định wc
không có tùy chọn in ra số lượng ký tự dòng mới ($ 1 đến awk), số lượng từ và số ký tự ($ 3 đến awk) theo thứ tự này.
echo -n "k" | wc -c
. Điều đó có ý nghĩa
printf
thường được ưa thích trước đây echo
khi tính nhất quán là quan trọng. Nó không in một dòng mới trừ khi được hỏi cụ thể, vì vậy , printf "k" | wc -m
cho 1
, tức là số lượng ký tự được in. Để đếm các ký tự trong dòng đầu tiên của tệp, người ta có thể làm ví dụ $(($(head -1 file | wc -m)-1))
(bọc nó $(())
để làm số học shell để loại bỏ số lượng dòng mới) hoặc thậm chí tốt hơn: sử dụng awk và do awk 'NR==1{print length}' file
.
khi bạn echo "k"
, echo
lệnh sẽ thêm một ký tự dòng mới vào bất cứ thứ gì bạn yêu cầu để in ra ("k"). Bạn có thể sử dụng -n
tùy chọn để vô hiệu hóa điều này:
echo -n k | wc -c
1
Để xem nhân vật vô hình đó , bạn có thể kết xuất luồng od
hoặc hd
:
echo k | od -t c
0000000 k \n
echo k | hd
00000000 6b 0a |k.|
echo k | od -t a -A n
k nl
-c
tùy chọn là một đếm byte, không phải là một số ký tự