파일의 공백 문자 수를 계산하고 싶습니다. 내가 생각할 수 있는 최선은 다음과 같습니다.
tr -cd [:space:] < my_file | wc
더 깨끗한 방법이 있습니까?
답변1
tr -cd '[:space:]' < my_file | wc -m
작동합니다. 그러나 GNU에서는 tr
문자당 단일 바이트 로케일(일반적으로 UTF-8 로케일에서는 작동하지 않음)이나 UTF-8 로케일의 ASCII 입력에서만 작동합니다.
따옴표가 없으면 [:space:]
csh, tcsh 또는 zsh에서 오류 메시지가 표시되며(아래 조건이 충족되지 않는 한) 대부분의 쉘에서는 현재 디렉토리에 , 또는:
,s
p
a
c
e
[:space:]
또한 wc
문자는 기본적으로 계산되지 않습니다(바이트, 단어 및 줄바꿈은 옵션이 제공되지 않을 때만 계산됩니다).
GNU를 사용하면 awk
다음을 사용할 수 있습니다.
awk -v RS='[[:space:]]' 'END{print NR}'
예:
$ printf '\0\u2006\t\r\n' | awk -v RS='[[:space:]]' 'END{print NR}'
4
(U+2006의 경우1인당 6명이 이용할 수 있는 공간, TAB, CR 및 NL 문자는 모두 내 로케일에서 공백으로 분류됩니다.
답변2
#!/bin/bash
file=`cat $1`
length=`cat $1 | wc -m` // Count the charater
count=0
for ((i = 0 ;i < $length;i++)) do //loop to the end of the string
if [ "${file:$i:1}" == "$2" ] //Look only character by character (select some characters of the String, (:$i:1) is the range of the choosen characters
then
count=$((count + 1))
fi
done
echo $count
//test.txt = "Is there a neater way?"
#./CountChar test.txt " "
>>> 4
이것은 "다른" 방법입니다..x), 마음에 드셨으면 좋겠습니다!