Bash文本统计脚本段落计数错误求助
Bash文本统计脚本段落计数错误求助
嘿,我发现你的段落计数逻辑里藏了个小疏漏!咱们一步步把它搞定:
问题出在哪?
你现在用来统计段落的awk命令是这样的:
paragraph_count=$(awk 'BEGIN { RS = "" } { print NF }' "$file")
这里的NF是指每个段落(awk里叫「记录」)中的单词字段数量,根本不是段落的总数!如果你的文本有多个段落,这个命令会输出每个段落的单词数,最后变量里会是一堆数字连在一起,完全不是你想要的结果。
另外补充下:RS = ""这个设置是对的,它会把一个或多个空行作为段落的分隔符,这符合咱们对段落的常规定义,但前提是你的文本确实用空行来分隔段落哦~
修正后的段落计数命令
把awk命令改成统计记录的总数(也就是段落数),用END { print NR }在最后输出总段落数:
paragraph_count=$(awk 'BEGIN { RS = "" } END { print NR }' "$file")
测试效果
假设你的测试文本是这样的(用空行分隔两个段落):
This is a sample text file. It contains some words and paragraphs. Feel free to add more, content for testing.
用修正后的命令,就能正确输出2,完全符合你的预期啦!
额外的小优化建议
你的脚本里还有几个可以简化的地方,能让它更高效:
- 单词统计可以简化:
word_count=$(wc -w < "$file")(wc本身就能直接统计单词数,不需要额外转换行) - 行数统计可以简化:
line_count=$(wc -l < "$file")(不用grep,wc -l直接数行数) - 字符统计可以简化:
character_count=$(wc -c < "$file")(去掉多余的cat管道)
备注:内容来源于stack exchange,提问作者Ane 2
相关产品推荐
相关产品推荐

