다음 델타를 어떻게 생성할 수 있나요?
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부터 까지의 숫자를 반복하고 $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%,}