Saya menggunakan perintah wc -c untuk menghitung jumlah karakter tetapi itu memberi saya angka yang salah, jumlah karakter ditambah satu sebagai contoh:
yang -cpilihan adalah jumlah byte, bukan jumlah karakter
mcalex
1
-m, --chars mencetak jumlah karakter Saya juga menggunakan masalah yang sama
Mohammad Karmi
Anda benar, saya pikir unicode adalah dua byte per char, tetapi tampaknya huruf ascii di uni masih 1 byte. Ingin tahu. Saya sedang berpikir EOL
mcalex
1
ya, saya mengetik "k" dalam sebuah file dan itu menunjukkan 2 karakter saya menghapusnya, jadi itu menunjukkan 0 penasaran
Mohammad Karmi
Jawaban:
19
Lihatlah pesan bantuan untuk wc. The -cpilihan mencetak jumlah karakter. The echoperintah termasuk karakter baris baru secara default. Saat wcmelihat baris baru, ia menghitungnya sebagai karakter lain dan karenanya menambah jumlah hasil Anda. Anda dapat menyiasatinya dengan menggunakan salah satu alternatif yang ditunjukkan di bawah ini; -wmenghitung jumlah kata dan -lmenghitung jumlah baris.
echo "k" | wc -w
echo "k" | wc -l
Anda dapat menyalurkan output wcke awkuntuk mendapatkan jumlah karakter kecuali karakter baris baru:
wc <filename> | awk '{print $3-$1}'
Output default wctanpa opsi mencetak jumlah karakter baris baru ($ 1 hingga awk), jumlah kata dan jumlah karakter ($ 3 hingga awk) dalam urutan ini.
ok, jadi ada satu kata dan satu baris, tetapi OP ingin tahu mengapa ada dua karakter / byte
mcalex
Saya ingin menghitung jumlah karakter bukan kata-kata atau garis
Mohammad Karmi
5
ahhh, maksudmu echo -n "k" | wc -c. Itu masuk akal
mcalex
Saya memasukkan char ke dalam file dan memberi sehingga EOF dihitung? atau baris baru atau apa? Karena saya ingin menghitung lebih dari satu char
Mohammad Karmi
1
@ user1865719: printfsering lebih disukai sebelumnya echoketika konsistensi penting. Itu tidak mencetak baris baru kecuali diminta secara khusus, jadi printf "k" | wc -mberikan 1, yaitu jumlah karakter yang dicetak. Untuk menghitung karakter di baris pertama file, seseorang dapat melakukan mis $(($(head -1 file | wc -m)-1))(membungkusnya $(())untuk melakukan shell aritmatika untuk menghapus jumlah baris baru) atau bahkan lebih baik: gunakan awk dan lakukan awk 'NR==1{print length}' file.
Daniel Andersson
12
ketika Anda echo "k", echoperintah menambahkan karakter baris baru untuk apa pun yang Anda minta untuk dicetak ("k"). Anda dapat menggunakan -nopsi untuk menonaktifkan ini:
echo -n k | wc -c
1
Untuk melihat karakter yang tidak terlihat itu , Anda dapat membuang aliran dengan odatau 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
pilihan adalah jumlah byte, bukan jumlah karakterJawaban:
Lihatlah pesan bantuan untuk
wc
. The-c
pilihan mencetak jumlah karakter. Theecho
perintah termasuk karakter baris baru secara default. Saatwc
melihat baris baru, ia menghitungnya sebagai karakter lain dan karenanya menambah jumlah hasil Anda. Anda dapat menyiasatinya dengan menggunakan salah satu alternatif yang ditunjukkan di bawah ini;-w
menghitung jumlah kata dan-l
menghitung jumlah baris.Anda dapat menyalurkan output
wc
keawk
untuk mendapatkan jumlah karakter kecuali karakter baris baru:Output default
wc
tanpa opsi mencetak jumlah karakter baris baru ($ 1 hingga awk), jumlah kata dan jumlah karakter ($ 3 hingga awk) dalam urutan ini.sumber
echo -n "k" | wc -c
. Itu masuk akalprintf
sering lebih disukai sebelumnyaecho
ketika konsistensi penting. Itu tidak mencetak baris baru kecuali diminta secara khusus, jadiprintf "k" | wc -m
berikan1
, yaitu jumlah karakter yang dicetak. Untuk menghitung karakter di baris pertama file, seseorang dapat melakukan mis$(($(head -1 file | wc -m)-1))
(membungkusnya$(())
untuk melakukan shell aritmatika untuk menghapus jumlah baris baru) atau bahkan lebih baik: gunakan awk dan lakukanawk 'NR==1{print length}' file
.ketika Anda
echo "k"
,echo
perintah menambahkan karakter baris baru untuk apa pun yang Anda minta untuk dicetak ("k"). Anda dapat menggunakan-n
opsi untuk menonaktifkan ini:Untuk melihat karakter yang tidak terlihat itu , Anda dapat membuang aliran dengan
od
atauhd
:sumber
Itu karena Anda menggunakan gema (yang memiliki carriage return), daripada menggunakan printf:
sumber