以下脚本列出目录中的项目。它产生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
答案 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