如何垂直而不是水平输出编号的列

How to output numbered columns vertically instead of horizontally

以下脚本列出目录中的项目。它产生 3 个编号列的输出。编号的输出在列中从左到右水平列出。相反,我希望输出在第一列垂直向下列出,然后是第二列,然后是第三列。我该如何实现?

脚本

#!/bin/bash

menu=( $(ls ${HOME}) )
i=0
for m in ${menu[@]}
do 
    echo "$(( i++ ))) ${m}"
done | xargs -L3 | column -t 

输出

0)   item    1)   item   2)   item
3)   item    4)   item   5)   item
6)   item    7)   item   8)   item
9)   item    10)  item   11)  item
12)  item    13)  item   14)  item

想要的输出

0)  item    5)  item    10)  item
1)  item    6)  item    11)  item
2)  item    7)  item    12)  item
3)  item    8)  item    13)  item
4)  item    9)  item    14)  item

你也可以这样试试;

#!/bin/bash
menu=( ${HOME}/* )
menLen=${#menu[@]}
rowCounts=$(echo $(( $menLen / 3 )))
for (( c=0; c<$rowCounts; c++ ))
do
findex=$c;
sindex=$(echo $(( $findex + $rowCounts )))
tindex=$(echo $(( $sindex + $rowCounts )))
printf "%-40s \t %-40s \t %-40s \n" "$findex ) ${menu[$findex]##*/}" "$sindex ) ${menu[$sindex]##*/}" "$tindex ) ${menu[$tindex]##*/}"
done 

无需过多重写您的代码,这将有效:

#!/bin/bash

menu=( $(ls ${HOME}) )
totalRows=$(( ${#menu[*]} / 3 + 1 ))
i=0
for m in ${menu[@]}
do    
    echo "$(( i/3 + (i%3)*totalRows ))) ${m}"
    let i++
done | xargs -L3 | column -t