2016-09-28 60 views
0

以下腳本列出目錄中的項目。它產生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

請參閱如果這能幫助,看起來你需要填充。 http://stackoverflow.com/questions/4409399/padding-characters-in-printf – Rao

回答

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 
1

,你也可以嘗試SOMET像這樣興奮;

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