for 루프를 사용하여 열 수와 열의 항목 수를 표시합니다.

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

모든 도움에 미리 감사드립니다!

답변1

필요한 행 수를 계산할 필요가 없습니다. $cols각 숫자 뒤에 개행 문자를 삽입하기 만 하면 됩니다 .

사용 seqawk:

$ 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처음의 코드를 모방합니다.

관련 정보