Bash
使用 for 循環顯示列數和列中的項目數
我正在編寫一個 BASH 腳本,詢問使用者列數和要放入列中的項目數。然後,該腳本將使用 for 循環將數字放入列中。
# Number of columns cols=$1 # Number of items num=$2 # Iterator variable count=1 # Number of rows rows=$(( ($num + ($cols - 1)) / $cols )) for x in $(seq 1 1 $rows) do for y in $(seq 1 1 $cols) do echo -ne "$count\t" (( count++ )) done echo "" done
例如,如果我輸入包含 28 個項目的 6 列,這就是輸出的樣子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
但是,這是我使用目前程式碼得到的輸出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
提前感謝大家的幫助!
您永遠不必計算所需的行數。您只需要確保在每個
$cols
數字後插入換行符。使用
seq
和awk
:$ num=28 $ cols=6 $ seq "$num" | awk -v cols="$cols" '{ printf "%-4d", $1 } NR % cols == 0 { printf "\n" } END { printf "\n" }' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
這會將讀取的每個數字列印
seq
為左對齊的十進制數字,每個數字允許四個寬度字元,沒有尾隨換行符。然後在列印完一行數字之後輸出一個換行符,並在最後輸出一個換行符。使用
rs
工具:$ num=28 $ cols=6 $ seq "$num" | rs 0 "$cols" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
如果您需要使用 shell 循環執行此操作,例如
bash
:$ num=28 $ cols=6 $ for ((i=1; i<=num; ++i)); do printf '%-4d' "$i"; (( i%cols == 0 )) && echo; done; echo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
這模仿
awk
了開頭的程式碼。