生成 2 页双面打印的页码列表:2,3,... 和 1,4,...

生成 2 页双面打印的页码列表:2,3,... 和 1,4,...

如何生成以下增量?

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

这有效。将其保存到,increment.bash然后键入bash increment.bash 2以获取从 2 开始的增量,或bash increment.bash 4从 4 开始的增量。如果未定义,将从 2 开始。 (对之前的实际工作进行了一些改进)

#!/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%,}

相关内容