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

Bash 如何垂直而不是水平输出带编号的列,bash,multiple-columns,Bash,Multiple Columns,以下脚本列出了目录中的项目。它生成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

以下脚本列出了目录中的项目。它生成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=( $(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=( $(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
菜单=(${HOME}/*)
menLen=${#menu[@]}
行数=$(echo$($menLen/3)))

对于((c=0;c你也可以试试这样的东西

#!/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
菜单=(${HOME}/*)
menLen=${#menu[@]}
行数=$(echo$($menLen/3)))

对于((c=0;c)而言,在不重写代码的情况下,这将起作用:

#!/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

在不过度重写代码的情况下,这将起作用:

#!/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

请看这是否有帮助,看起来你需要填充。请看这是否有帮助,看起来你需要填充。