bash를 사용하여 문자 수 계산

bash를 사용하여 문자 수 계산

저는 bash를 처음 접했고 파일의 문자 수를 계산하려고합니다. 나는 다음 함수를 작성했습니다.

function chars(){
    m=$(cat $1)
    m=${#m}
    echo $m
}

echo $(chars $2)파일에서 호출한 결과는 524이고, wc -c동일한 파일에서 호출한 결과는 525입니다. 차이의 원인은 무엇입니까? 어떻게 하면 같은 결과를 얻을 수 있나요? (부가적인 질문으로, 함수의 처음 두 줄을 하나로 결합할 수 있나요?)

답변1

wc -c바이트 수를 반환합니다.

wc -m문자 수를 반환합니다.

귀하의 함수는 문자 수를 계산하므로 귀하의 함수의 출력 번호는 wc -m의 출력과 일치해야 한다고 생각합니다.

답변2

wc다음 명령을 시도해 볼 수 있습니다 .

echo -n file | wc -m 

이런 식으로 추가된 추가 개행 문자는 계산되지 않습니다 wc. 일반적으로 파일 끝에는 개행 문자(편집기가 추가함)가 있습니다 wc. 따라서 해당 문자도 계산하려면 솔루션을 수정해야 합니다. 그렇지 않으면 함수가 제대로 작동합니다.

답변3

파일을 보지 않고는 이유를 정확히 말하기는 어렵지만, Bash에서 이러한 방식으로 계산할 때 발생하는 문제를 보여주는 작은 예제 파일은 다음과 같습니다.

$ cat afile 
blah
blah


<EOF>

실제로 는 <EOF>파일에 존재하지 않으며 파일 끝에 2개의 빈 줄이 있다는 것만 표시됩니다. 따라서 파일을 수동으로 계산하면 그 안에 12개의 문자가 있습니다. 8 + 4(개행 문자)라고 가정해 보겠습니다.

이 파일의 개수를 계산하려면 일반적인 방법을 사용하세요.

$ wc -m afile 
12 afile

바이트 수:

$ wc -c afile 
12 afile

귀하의 방법을 사용하십시오 :

$ m=$(< afile)
$ echo ${#m}
9

이 계산 방법이 예상대로 작동하지 않는 것 같습니다. \n다른 문자를 포함하지 않는 줄에 나타나는 줄 끝 문자( ) 는 계산할 수 없습니다 .

너의 문제

524 대 525 질문에 대한 귀하의 설명에 따르면 샘플 파일에 빈 줄이 있는 것 같습니다.

wc내 솔루션을 적용하는 대신 이 애플리케이션에서 이를 사용하겠습니다 . 이러한 도구는 이유가 있어서 존재합니다. 바퀴를 재발명하지 마세요. 유닉스는 당신의 자동차를 위한 멋진 잡지를 만들었습니다.

관련 정보