2016-09-28 10 views
0

次のスクリプトは、ディレクトリ内の項目を一覧表示します。 3つの番号付き列の出力を生成します。番号の付いた出力は、列を横切って左から右に水平に表示されます。代わりに、最初の列、次に2番目の列、3番目の列の順に列挙される出力が好きです。これをどのように達成するのですか?水平方向ではなく番号付き列を垂直方向に出力する方法

スクリプト

#!/bin/bash 

menu=($(ls ${HOME})) 
i=0 
for m in ${menu[@]} 
do 
    echo "$((i++))) ${m}" 
done | xargs -L3 | column -t 

あなたもSOMETを試すことができ、出力

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

このようなヒンジ。

#!/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 
関連する問題