2つの入力数字の間のすべての数字をファイルに書き込むループ

2つの入力数字の間のすべての数字をファイルに書き込むループ

220210や220221など、2つの数字(すべて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デスクトップ電卓ユーティリティを使用してこれを行うことができます。 2つの範囲番号を順序に関係なくロードします。負の記号をダッシュ​​の代わりに下線に変更することを忘れないでください。たとえば、-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 }'

関連情報