加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – bash:一次获取多个数组元素的简单方法?

发布时间:2020-12-13 23:57:04 所属栏目:Linux 来源:网络整理
导读:是否有* nix命令格式化输入(由换行符分隔),以便每行只显示特定的最大元素数?例如: $yes x | head -10 | command 4 x x x xx x x xx x 我写了一个执行此任务的快速bash脚本(如下所示),但它似乎很长并且可能效率低下.有一个更好的方法吗? #!/bin/shif [ -z
是否有* nix命令格式化输入(由换行符分隔),以便每行只显示特定的最大元素数?例如:

$yes x | head -10 | command 4
x x x x
x x x x
x x

我写了一个执行此任务的快速bash脚本(如下所示),但它似乎很长并且可能效率低下.有一个更好的方法吗?

#!/bin/sh

if [ -z "$1" -o -z "$2" ]; then
        echo Usage `basename $0` {rows} {columns}
        exit 1
fi

ROWS=$1
COLS=$2

input=$(yes x | head -${ROWS})
lines=()
i=0
j=0
eol=0

for x in ${input[*]}
do
        lines[$i]="${lines[$i]} $x"
        j=`expr $j + 1`
        eol=0
        if [ $j -ge ${COLS} ]; then
                echo lines[$i] = ${lines[$i]}
                i=`expr $i + 1`
                j=0
                eol=1
        fi
done

if [ ${eol} -eq 0 ]; then
        echo lines[$i] = ${lines[$i]}
fi

解决方法

printf '%-10s%-10s%-10s%sn' $(command | command)

printf将一次消耗格式字符串中指定的参数数量,并继续使用,直到它们全部消耗完为止.

示范:

$printf '%-10s%-10s%-10s%sn' $(yes x | head -n 10)
x         x         x         x
x         x         x         x
x         x
$printf '%-10s%-10s%-10s%sn' $(<speech)
now       is        the       time
for       all       good      men
to        come      to        the
aid       of        their     country

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读