如何垂直而不是水平输出编号的列
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
以下脚本列出目录中的项目。它产生 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