给出一个宽度,我试图计算包含段落(\ 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
}
以文本形式读取文本无效。
答案 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.