次のデルタをどのように生成できますか?
2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31,34,35,38,39,42,43,46,47,...,135
そして
4,5,8,9,12,13,16,17,20,21,24,25,28,29,32,33,36,37,40,41,44,45,48,49,...,137
ページを印刷するときに必要です。 Bashで増分計算「oneliners」を作成できますが、作成することはできません。誰でも私を助けることができますか?
答え1
何をしたいのかわかりませんが、そのシーケンスを計算することは非常に簡単です。
i=2 # or 4
while true; do
echo $i
i=$(($i+1))
echo $i
i=$(($i+3))
done
答え2
これはうまくいきます。 2から増やすか、4から増やすように保存してincrement.bash
入力します。定義されていない場合は2から始まります。 (以前の実際の作業よりも一部改善されました)bash increment.bash 2
bash increment.bash 4
#!/bin/bash
if [ $1 ]; then
opt=$1
if [ $opt == "--help" ]; then echo "Usage: $0 [2|4] -- either starting number 2 or 4, to print first number and +1, increment by 3, then continue."; exit 0
elif [ $opt == 2 ]; then i=$opt
elif [ $opt == 4 ]; then i=$opt
fi
else i=2
fi
echo $i; let i++; echo $i;
for (( n=1; $n < 35; n++ )); do
if [ $i == 135 ] || [ $i == 137 ]; then break; fi
i=$[i+3]; echo "$i";
let i++; echo "$i";
done
これが実際に動作するものです:
$ for i in {2..4..2}; do for type in head tail; do echo ":: $i | $type :: "; bash increment.bash $i | $type; done; done
:: 2 | head ::
2
3
6
7
10
11
14
15
18
19
:: 2 | tail ::
118
119
122
123
126
127
130
131
134
135
:: 4 | head ::
4
5
8
9
12
13
16
17
20
21
:: 4 | tail ::
120
121
124
125
128
129
132
133
136
137
答え3
使用GNU sed~のためスタート~ステップコメント。
printf "%s\n" {1..137} |tee \
>(sed -nr '2~4H; 3~4H; ${g; s/\n/,/g; s/^,(.*)/\1/p}'>set23) |
sed -nr '4~4H; 5~4H; ${g; s/\n/,/g; s/^,(.*)/\1/p}'>set45
cat set23
cat set45
出力
2,3,6,7,10,11,14,15, ... ,130,131,134,135
4,5,8,9,12,13,16,17, ... ,132,133,136,137
答え4
以下は、これらの数字のリストを作成する1つの方法です。 1からの数字を繰り返し、$n
その数字を適切なリストに追加します。以下のコードスニペットは移植可能な構文のみを使用します。
recto= verso= i=1
while [ $i -le $n ]; do
if [ $((i % 4)) -le 1 ]; then recto=$recto,$i; else verso=$verso,$i; done
i=$((i + 1))
done
recto=${recto%,} verso=${verso%,}
これは ksh/bash/zsh バージョンです:
recto= verso=
for ((i=1; i<n; i++)); do
if ((i % 4 <= 1)); then recto=$recto,$i; else verso=$verso,$i; done
done
recto=${recto%,} verso=${verso%,}