리눅스 쉘 wc -c 문자 수 +1


17

wc -c 명령을 사용하여 문자 수를 계산했지만 예를 들어 잘못된 수, 문자 수 + 1을 제공합니다.

echo "k" | wc -c 

그것은 2 문자를 제공합니다

왜 1이 아닌가?


3
-c옵션은 바이트 수가 아닌 글자 수있다
mcalex

1
-m, 나는이 같은 문제에 사용되는 문자 카운트 인쇄 --chars
모하마드 Karmi

맞습니다, 유니 코드는 문자 당 2 바이트라고 생각했지만 유니의 ASCII 문자는 여전히 1 바이트 인 것 같습니다. 궁금한. 나는 EOL을 생각하고있다
mcalex

1
네, 파일에 "k"를 입력했는데 2 개의 문자가 제거되었습니다. 그래서 0이 궁금합니다.
Mohammad Karmi

답변:


19

에 대한 도움말 메시지를 살펴보십시오 wc. 이 -c옵션은 문자 수를 인쇄합니다. 이 echo명령에는 기본적으로 줄 바꿈 문자가 포함됩니다. 때 wc줄 바꿈을보고는 다른 문자 따라서 당신의 결과에 추가 계수로 계산합니다. 아래 표시된 대안 중 하나를 사용하여이 문제를 해결할 수 있습니다. -w단어 -l수와 행 수를 계산합니다.

echo "k" | wc -w 
echo "k" | wc -l

당신은 파이프의 출력 수 wc에는 awk개행 문자를 제외한 문자 수를 얻을 수 있습니다 :

wc <filename> | awk '{print $3-$1}'

wc옵션이없는 의 기본 출력은 줄 바꿈 문자 수 ($ 1 ~ awk), 단어 수 및 문자 수 ($ 3 ~ awk)를이 순서대로 인쇄합니다.


자, 한 단어와 한 줄이 있지만 OP는 왜 두 문자 / 바이트가 있는지 알고 싶어합니다
mcalex

나는 문자없는 단어도 라인의 수를 계산하려면
모하마드 Karmi

6
아, 그래서 당신은 의미 echo -n "k" | wc -c. 그것은 의미가있다
mcalex

문자를 파일에 넣고 EOF가 계산되도록합니까? 또는 줄 바꾸기 또는 무엇?, 하나 이상의 문자를 계산하려면
Mohammad Karmi

2
@ user1865719 : 일관성이 중요한 경우 printf가 종종 echo있습니다. 특별히 요청하지 않는 한 지금, 줄 바꿈을 인쇄하지 않습니다 printf "k" | wc -m제공 1즉에게, 인쇄 된 문자의 수를. 파일의 첫 번째 줄에서 문자를 세려면 예를 들어 $(($(head -1 file | wc -m)-1))( $(())줄 바꿈을 수행하여 줄 바꿈 계산을 제거하기 위해 줄 바꿈) 또는 더 나은 방법 : awk 및 do를 사용하십시오 awk 'NR==1{print length}' file.
Daniel Andersson

13

when echo "k"이면 echo명령은 줄 바꿈 문자를 인쇄하도록 요청한 모든 것에 추가합니다 ( "k"). 이 -n옵션을 사용하여 이를 비활성화 할 수 있습니다 .

echo -n k | wc -c
1

그보기 위해 눈에 보이지 않는 문자를, 당신은 스트림 파크 덤프 수 od또는 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

6

echo문자열을 사용하면 문자열에 줄 바꿈이 추가 되기 때문 입니다. printf대신 사용하십시오 :

$ echo k | wc -c 
       2
$ printf k | wc -c
       1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.