假设我有一个字符串,例如3121
。我想以更图形化的方式打印它。将其转换(使用sed
/ awk
转换为水平条以得到类似的内容相对简单:
3 ###
1 #
2 ##
1 #
您可以转换每个值,echo
结果,然后继续。
但是,如果我想将它们转换为垂直条,怎么办?
#
# #
####
3121
我正在努力寻找一种水平添加多行输出的有效方法。我确定以前曾问过这个问题,但我什么都找不到。
答案 0 :(得分:2)
如果gawk可用,如何:
#!/bin/bash
s="3121"
awk -v s="$s" 'BEGIN {
len = split(s, ary, "");
# store characters in a matrix a[i,j]
for (i = 1; i <= len; i++) {
a[i,1] = ary[i];
for (j = 1; j <= ary[i]; j++) {
a[i,j+1] = "#";
}
if (p < ary[i]) p = ary[i];
}
# print a[i,j] in a transposed order
for (j = p + 1; j >= 1; j--) {
str = "";
for (i = 1; i <= len; i++) {
if (a[i,j] == "") a[i,j] = " ";
str = str a[i,j];
}
print str;
}
}'
产生:
#
# #
####
3121