我尝试用Bash计算我文件中的数字和字母数。
我知道我可以使用wc -c file
来计算字符数,但是如何才能将其修改为字母和其他数字呢?
答案 0 :(得分:1)
这是一种完全避免管道的方法,只需使用tr
和shell的方式来给出${#variable}
变量的长度:
$ cat file
123 sdf
231 (3)
huh? 564
242 wr =!
$ NUMBERS=$(tr -dc '[:digit:]' < file)
$ LETTERS=$(tr -dc '[:alpha:]' < file)
$ ALNUM=$(tr -dc '[:alnum:]' < file)
$ echo ${#NUMBERS} ${#LETTERS} ${#ALNUM}
13 8 21
答案 1 :(得分:0)
您可以使用tr
通过组合-c
(补全)和-d
(删除)标记来仅保留字母数字字符。从那以后,这只是一个问题:
$ cat myfile.txr | tr -cd [:alnum:] | wc -c
答案 2 :(得分:0)
要计算可以grep
与wc
合并的字母和数字的数量:
grep -o [a-z] myfile | wc -c
grep -o [0-9] myfile | wc -c
通过一些调整,你可以修改它来计算数字或字母或像这样的字母数字,
grep -o [a-z]+ myfile | wc -c
grep -o [0-9]+ myfile | wc -c
grep -o [[:alnum:]]+ myfile | wc -c
答案 3 :(得分:0)
您可以使用sed替换所有不符合您要求的字符,然后对结果中的字符进行字数统计。
# 1h;1!H will place all lines into the buffer that way you can replace
# newline characters
sed -n '1h;1!H;${;g;s/[^a-zA-Z]//g;p;}' myfile | wc -c
It's easy enough to just do numbers as well.
sed -n '1h;1!H;${;g;s/[^0-9]//g;p;}' myfile | wc -c
Or why not both.
sed -n '1h;1!H;${;g;s/[^0-9a-zA-Z]//g;p;}' myfile | wc -c
答案 4 :(得分:0)
有很多方法可以用来分析bash中文本文件的行, word 和字符频率。利用bash内置字符大小写过滤器(例如"
等),您可以深入查看文本文件中每种字符类型每次出现的频率。下面是一个简单的脚本,从[ ... ]
读取并提供正常[:upper:]
输出作为第一行输出,然后输出stdin
,wc
,{{ 1}},upper
和lower
。
digits
测试输入
punct
示例使用/输出
whitespace
您可以自定义脚本,为您提供尽可能少的细节。如果您有任何问题,请告诉我。