我在电信公司工作,经常需要扩大号码范围。
例如,6121234567X
[注意X之前有10个数字]是简写:
61212345670
61212345671
61212345672....... etc (a 10 number range)
和612123456X
[请注意,X之前只有9个数字]是
61212345600
61212345601....... etc (a 100 number range)
所以我需要一个grep命令......
答案 0 :(得分:0)
您可以很快地在awk
中执行此操作:
awk -v val=$a -v max=10
'BEGIN {
gsub("X","",val)
items=max - length(val)
for (i=0; i<=10^items; i++)
print val*(10^items)+i
}'
这是一个例子。要从文件中执行相同的阅读,您只需要使用$1
(字段的第一个字段)而不是val
,并将所有代码从BEGIN
移到主要块中。
-v val=$a -v max=10
传递参数:$a
是包含12345678X
表单上字符串的变量,而max
包含该数字将包含的最大位数(10情况)。BEGIN {}
执行所有这些操作[之前/之后]读取文件。gsub("X","",val)
从X
移除val
。items=max - length(val)
计算不带X
的变量大小。for (i=0; i<=10^items; i++) print val*(10^items)+i
从0
循环到10 ^ remaining_size。这意味着从0到10或从0到100 ......取决于没有X的10尺寸的结果。最多9个:
$ a=12345678X
$ awk -v val=$a -v max=9 'BEGIN {gsub("X","",val); items=max - length(val); for (i=0; i<=10^items; i++) print val*(10^items)+i}'
123456780
123456781
123456782
123456783
123456784
123456785
123456786
123456787
123456788
123456789
123456790
答案 1 :(得分:0)
下面是执行此操作的Python脚本,file-name是预期的第一个参数。用法示例:python script.py file.in > file.out
#!/usr/bin/env python
import sys
def generate(pattern):
p = pattern.lower().find('x')
ret = ""
for i in range(10**(10-p+1)):
ret += pattern[:p] + str(i).zfill(10-p+1) + " "
return ret
if __name__ == "__main__":
if len(sys.argv) <= 1:
print("Filename needed!")
else:
with open(sys.argv[1]) as f:
for ln in f:
print(generate(ln.rstrip()))
答案 2 :(得分:0)
echo 6121234567X | perl -nE 'm/(.*)X/;
say $1. $_ foreach (0..10**(11-length $1)-1)'
61212345670
61212345671
61212345672
61212345673
61212345674
61212345675
61212345676
61212345677
61212345678
61212345679
获得零填充格式有点丑陋:
echo 611234567X | perl -wne 'm/(.*)X/; $b=$1; $r=11 - length $b;
$fmt="%0" . $r . "s\n";
printf "$b$fmt", $_ foreach (0..10**$r-1) '