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
使用给定的下划线分隔坐标数组(如: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