Użyłem polecenia wc -c, aby policzyć liczbę znaków, ale podaje mi to niepoprawną liczbę, liczbę znaków plus jeden jako przykład:
echo "k" | wc -c
daje mi 2 znaki
więc dlaczego nie 1?
Użyłem polecenia wc -c, aby policzyć liczbę znaków, ale podaje mi to niepoprawną liczbę, liczbę znaków plus jeden jako przykład:
echo "k" | wc -c
daje mi 2 znaki
więc dlaczego nie 1?
Odpowiedzi:
Spójrz na komunikat pomocy dla wc. -cOpcja wypisuje liczbę znaków. echoPolecenie zawiera znak nowej linii domyślnie. Kiedy wcwidzi nowy wiersz, liczy się on jako inny znak, a zatem dodatkowy wynik w twoim wyniku. Możesz obejść ten problem, korzystając z jednej z poniższych opcji; -wliczy liczbę słów i -lliczbę wierszy.
echo "k" | wc -w
echo "k" | wc -l
Możesz przesłać dane wyjściowe wcdo, awkaby uzyskać liczbę znaków z wyłączeniem znaków nowego wiersza:
wc <filename> | awk '{print $3-$1}'
Domyślne wyjście wcbez opcji wypisuje liczbę znaków nowego wiersza (1 $ na awk), liczbę słów i liczbę znaków (3 $ na awk) w tej kolejności.
echo -n "k" | wc -c. To ma sens
printfczęsto jest preferowany wcześniej, echogdy ważna jest spójność. Nie drukuje nowego wiersza, chyba że zostanie o to wyraźnie poproszony, więc printf "k" | wc -mpodaje 1, tj. Liczbę wydrukowanych znaków. Aby policzyć znaki w pierwszym wierszu pliku, można np. $(($(head -1 file | wc -m)-1))(Owinąć go, $(())aby wykonać arytmetykę powłoki, aby usunąć liczbę nowych wierszy ) lub jeszcze lepiej: użyć awk i zrobić awk 'NR==1{print length}' file.
kiedy ty echo "k", echopolecenie dodaje znak nowej linii do wszystkiego, o co go poprosiłeś („k”). Możesz użyć tej -nopcji, aby to wyłączyć:
echo -n k | wc -c
1
Aby wyświetlić tę niewidzialną postać, możesz zrzucić strumień odlub 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
-copcja to liczba bajtów, a nie liczba znaków