以Bash返回给定宽度的文本段落所需的行数

时间:2019-02-16 01:06:54

标签: arrays string bash shell

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

我不能简单地将字符数除以宽度,因为行尾会尽早创建新行。我不能仅仅因为某些段落会换行而计算行尾。

我认为我需要遍历段落,将每个字符除以宽度并将结果相加。

    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
}

以文本形式读取文本无效。

1 个答案:

答案 0 :(得分:0)

count_lines() {
  fmt -w "$2" <<<"$1" | wc -l
}
  • fmt是一个长期存在的UNIX工具(早于Plan 9,在GNU系统上是coreutils的一部分),它将文本包装到所需的宽度。
  • <<<是herestring语法,是heredocs的ksh和bash替代方法,它允许在不将脚本分成多行的情况下使用它们。

对此进行测试:

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

...返回10的输出。是正确的,因为文本的包装如下(为便于阅读,在开头添加了几行):

 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.