저는 사용자에게 열 수와 열에 넣을 항목 수를 묻는 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
모든 도움에 미리 감사드립니다!
답변1
필요한 행 수를 계산할 필요가 없습니다. $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
왼쪽 정렬 십진수로 인쇄하며, 숫자당 너비는 4자이고 후행 줄 바꿈은 허용되지 않습니다. 그런 다음 숫자 줄을 인쇄한 후 끝에서 매번 개행 문자를 출력합니다.
이 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
만약 너라면필요이를 수행하려면 쉘 루프를 사용하십시오 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
처음의 코드를 모방합니다.