首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回给定宽度( Bash )的文本段落所需的行数。

问返回给定宽度( Bash )的文本段落所需的行数。
EN

Stack Overflow用户
提问于 2019-02-16 01:06:53
回答 1查看 48关注 0票数 0

给定一个宽度,我试图计算一个包含段落(\n行尾)的文本块将占用多少行。

我不能简单地将字符数除以宽度,因为行尾会提前创建新行。我不能数行的结尾,仅仅是因为有些段落会换行。

我认为我需要循环通过段落,除以字符的宽度,并将结果加在一起。

代码语言:javascript
复制
    count_lines() {
    TEXT="$(echo -e $1)"
    WIDTH=$2
    LINES=0
    for i in "${TEXT[@]}"
    do
    PAR=$(echo -e "$i" | wc -c)
    LINES=$LINES + (( $PAR / $WIDTH ))
    done
    RETURN $LINES
}

将文本作为数组读取不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-16 01:25:34

代码语言:javascript
复制
count_lines() {
  fmt -w "$2" <<<"$1" | wc -l
}
  • fmt是一个由来已久的UNIX工具(最早出现在计划9,也是GNU系统核心功能的一部分),它将文本包装到所需的宽度。
  • <<<是下面的字符串语法,它是一种ksh和bash替代遗传的方法,它允许在不将脚本分割成多行的情况下使用它们。

对此进行测试:

代码语言:javascript
复制
text=$(cat <<'EOF'
This is a sample document with multiple paragraphs. This paragraph is the first one.

This is the second paragraph of the sample document.
EOF
)
count_lines "$text" 20

...returns输出的10。这是正确的,因为文本包装如下(为可读性在开头添加的行):

代码语言:javascript
复制
 1 This is a
 2 sample document
 3 with multiple
 4 paragraphs. This
 5 paragraph is the
 6 first one.
 7 
 8 This is the second
 9 paragraph of the
10 sample document.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54718913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档