Bash 如何垂直而不是水平输出带编号的列
以下脚本列出了目录中的项目。它生成3个编号列的输出。编号的输出在列之间从左到右水平列出。相反,我希望输出在第一列、第二列和第三列垂直向下列出。我如何做到这一点 脚本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
#!/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
请看这是否有帮助,看起来你需要填充。请看这是否有帮助,看起来你需要填充。