Bash绘制坐标数组的函数

Bash function to draw array of coordinates

使用给定的下划线分隔坐标数组(如:5_2 4_5 1_3),我需要一个快速的 bash 函数来在终端屏幕上的这些位置绘制块字符。现在我有这个:

function draw() {
    clear
    for i in $(echo $@); do
        y=$(echo $i | cut -d '_' -f1)
        x=$(echo $i | cut -d '_' -f2)
        tput cup $x $y && printf "█"
    done
}

这个功能很好,但是速度很慢 - 用 8 个坐标执行它需要 0.158 秒。有更好更快的方法吗?

我不知道这真的是个好主意,但这个重构在我的盒子上运行速度大约是原来的两倍:

draw() {
    clear
    for i; do
        y=${i%_*}
        x=${i#*_}
        tput cup $x $y && printf "█"
    done
}

你能用 awk 打败这个吗?:

#!/usr/bin/env bash

coords=( 5_2 4_5 1_3 )

awk 'BEGIN{RS=" ";FS="_"}{printf("\x1B[%d;%dH█",+1,+1)}' <<<"${coords[@]}"

或 POSIX shell:

#!/usr/bin/env sh

coords="5_2 4_5 1_3"

printf '%s\n' $coords | awk -F_ '{printf("\x1B[%d;%dH█",+1,+1)}'

如果您在 coords.txt 文件中有坐标:

5_2
4_5
1_3

一条线将在坐标处绘制您的方块

awk -F_ '{printf("\x1B[%d;%dH█",+1,+1)}' <coords.txt