给定一个宽度,我试图计算一个包含段落(\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
}将文本作为数组读取不起作用。
发布于 2019-02-16 01:25:34
count_lines() {
fmt -w "$2" <<<"$1" | wc -l
}fmt是一个由来已久的UNIX工具(最早出现在计划9,也是GNU系统核心功能的一部分),它将文本包装到所需的宽度。<<<是下面的字符串语法,它是一种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...returns输出的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.https://stackoverflow.com/questions/54718913
复制相似问题