![根据零的数量增加数字](https://linux22.com/image/218341/%E6%A0%B9%E6%8D%AE%E9%9B%B6%E7%9A%84%E6%95%B0%E9%87%8F%E5%A2%9E%E5%8A%A0%E6%95%B0%E5%AD%97.png)
我想要一个由"1234567890"
重复至 length组成的字符串72
。另一个长度相同且包含非零数字的字符串。我得到的不是数字零,而是从 开始递增的数字1
。
因此对于字符串
"1234567890123456789012345678901234567890"
我得到以下打印结果
1 2 3 4
1234567890123456789012345678901234567890
我想这样做到底72
已经开始用空格删除非零值,但增加位置处的索引0
是一个真正的问题。
wz="1234567890" # Basic measure of ten
hg="${wz}${wz}${wz}${wz}${wz}${wz}${wz}12"
ha=${hg//[123456789]/" "}
printf '%s\n' "$ha"
printf '%s\n' "$hg"
答案1
此函数进行所需的重复(最多 200 个字符),然后根据参数截断它们。
#! /bin/bash
Ruler () { # (lth)
local Tens Digs j
printf -v Tens '%10d' {1..20}
for (( j = 1; j <= 20; j++)); do Digs="${Digs}1234567890"; done
printf '%s\n%s\n' "${Tens:0:${1}}" "${Digs:0:${1}}"
}
Ruler 72
Ruler 32
像这样:
$ ./Hdsup
1 2 3 4 5 6 7
123456789012345678901234567890123456789012345678901234567890123456789012
1 2 3
12345678901234567890123456789012
答案2
下列awk
程序将产生两个“标尺”,每个标尺由一行数字组成。这第二行将从 1 到 10 进行编号(用 0 代替 10),数字之间没有中间间距。第一行的编号类似,但每个数字之间有一定的间距。
该程序采用两个可选的命令行参数。第一个参数是第二个标尺的总宽度(默认为 80),而第二个参数是第一个标尺编号的步长或制表符宽度(默认为 8,因为这是常见的制表符宽度) Unix 终端)。
运行示例:
$ ./ruler
1 2 3 4 5 6 7 8 9 0
12345678901234567890123456789012345678901234567890123456789012345678901234567890
$ ./ruler 72
1 2 3 4 5 6 7 8 9
123456789012345678901234567890123456789012345678901234567890123456789012
$ ./ruler 72 10
1 2 3 4 5 6 7
123456789012345678901234567890123456789012345678901234567890123456789012
$ ./ruler 122 6
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
剧本ruler
:
#!/usr/bin/awk -f
BEGIN {
width = ARGC >= 2 ? ARGV[1] : 80
step = ARGC >= 3 ? ARGV[2] : 8
while (++i <= width) {
if (i%step == 0) line1 = line1 sprintf("%*s", step, (i/step)%10)
line2 = line2 (i%10)
}
print line1
print line2
}
这本质上是在循环的每次迭代中将下一个数字添加到line2
字符串(第二个标尺) ,同时在每次迭代中将带有数字的while
右调整宽度字段添加到字符串(第一个标尺)。step
line1
step
此代码中没有宽度限制,也没有对命令行参数进行清理或验证。