在终端中将值转换为多线条形图

时间:2018-07-30 00:36:23

标签: bash command-line-interface

假设我有一个字符串,例如3121。我想以更图形化的方式打印它。将其转换(使用sed / awk转换为水平条以得到类似的内容相对简单:

3 ###
1 #
2 ##
1 #

您可以转换每个值,echo结果,然后继续。

但是,如果我想将它们转换为垂直条,怎么办?

#
# #
####
3121

我正在努力寻找一种水平添加多行输出的有效方法。我确定以前曾问过这个问题,但我什么都找不到。

1 个答案:

答案 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