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

时间:2016-09-28 06:54:46

标签: 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    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

2 个答案:

答案 0 :(得分:1)

你也可以尝试这样的事情;

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

答案 1 :(得分:1)

如果不重写代码太多,这将有效:

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