我想计算文件中空白字符的数量。我能想到的最好的办法是:
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 中收到错误消息(除非满足下面的条件),并且在大多数 shell 中,如果当前目录中有一个名为、、:
、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每人六人的空间、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),希望你喜欢它!