두 입력 숫자 사이의 모든 숫자를 파일에 쓰는 루프

두 입력 숫자 사이의 모든 숫자를 파일에 쓰는 루프

220210 및 220221과 같이 두 개의 숫자(모두 6자리)가 필요한 스크립트가 있습니다.

내가 원하는 것은 220210에서 220221 사이의 모든 숫자와 이 2개의 숫자를 파일에 쓰는 루프입니다.

나는 이것이 아마도 매우 간단하다는 것을 알고 있지만 그것은 나를 괴롭혔습니다.

HP-UX 11.23 배시

답변1

seq 명령을 사용할 수 없는 것 같아서 이것이 귀하의 bash 버전에서 작동하는지 확실하지 않지만 다음과 같은 범위에 사용해 볼 수 있습니다.

#!/bin/bash
for n in {220210..220221}
 do
  echo $n >> numberfile.txt 
done

답변2

dc데스크탑 계산기 유틸리티를 사용하여 이 작업을 수행 할 수 있습니다 . 두 개의 범위 번호를 순서에 관계없이 로드합니다. 음수 기호를 대시 대신 밑줄로 변경하는 것을 잊지 마십시오. 예를 들어 -32는 _32로 입력됩니다.

dc <<EOF
220201 220210
[larsa]sb
[lap1+sadla<+]s+
sadla>bla
sal+xp
EOF

결과:

220201
220202
220203
220204
220205
220206
220207
220208
220209
220210

bc또 다른 방법은 이진 계산기 유틸리티를 사용하는 것입니다 . 보시다시피 숫자는 어떤 순서로든 로드되며, bc는 필요한 경우 숫자를 뒤집고 1단계로 작은 것에서 큰 것으로 반복을 시작합니다.

echo "a=7;b=0;if(a>b){t=a;a=b;b=t;};for(i=a; i<=b; i++) {i;}" | bc

답변3

seq이를 수행하는 올바른 방법은 다른 답변에서 제안하는 것처럼 확장을 사용하거나 보호하는 것입니다 . 어떤 이유로든 할 수 없는 경우필요간단한 POSIX 셸에서 이 작업을 수행하려면 다음을 시도해 보세요.

#!/bin/sh

i=$1;

while [ $i -le $2 ]; do
  echo "$i"
  i=$((i+1))
done

약간 더 현대적인(그러나 이식성이 덜하고 POSIX가 아닌) 구문은 다음과 같습니다.

#!/bin/bash

for((i=$1;i<=$2;i++)); do
  echo "$i"
done

답변4

awk는 지난 30년 동안 거의 모든 배포판에 사용되었으며 이것이 기본 K&R awk입니다.

echo 220210 220221 | awk '{ for (j = $1; j <= $2; j++) print j }'

관련 정보