Linux shell,在一句printf进行中文格式化输出时,如何将每列中文进行左对齐右对齐,每列每行中文字符数不固定。
例如:
printf "%-10s :%-8s\n" 上海 12345
%-10s指定字符串的长度是10,字符串长度不够时后面补充空格, 10前面的 - (负号)表示左对齐
下面的教程中有说明:
https://www.runoob.com/linux/linux-shell-printf.html
你首先要确认你前面中文列的最大显示字符宽度,只有确认了,才能真正解决这个问题,注意1个中文字符占用2个显示字符宽度。
假定得到中文字符占用最大字符宽度是16,则
printf "%-16s:%s" 乌鲁木齐 432153
这里的16就是前面获取的最大值,用来明确占位空间大小。
这里后面数字输出因为是紧接的,不用特别处理,直接输出即可,除非其需要右对齐才需要特殊处理。
字符串输出排版类似c语言的printf,前面指定格式,后面指定输出字符。
printf "%-15s:%-10s\n" 上海 12345
printf "%-15s:%-10s\n" 哈尔滨 5678
printf "%-15s:%-10s\n" 乌鲁木齐 432153
不知道你想实现的是不是这种效果。
#!/bin/bash
iforfree_printf(){
read -p "请输入一组信息并以空格隔开: " info
zh_counts=`echo $info |awk -F ' ' '{print $1}'|wc -L`
((WEIGHT=$zh_counts/2))
((WEIGHT=15+$WEIGHT))
printf "%-${WEIGHT}s:%-s\n" $info
}
while true
do
iforfree_printf
done
把第一个字符串右边加空格弄长,再截取,接上第二个字符串