我有这个 bash 脚本,它生成 5 位长度的数组的每个组合:
#!/usr/bin/env bash
for combo in \
{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\
{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\
{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\
{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9}\
{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9};
do echo $combo;
done > output.txt
Run Code Online (Sandbox Code Playgroud)
这将输出:
$ ./script.sh
aaaaa
aaaab
aaaac
...
Run Code Online (Sandbox Code Playgroud)
然而,这只是冻结我的电脑。有没有办法将数据越来越多地写入文件?另外,是否可以将输出分开到不同的文件,例如每 65536 行?比如 output1.txt、output2.txt、output3.txt?
感谢您的帮助!
很难在 shell 中不占用大量内存的情况下生成这些大排列。
您可以尝试另一种语言,如 Python:
$ python -c '
import itertools, string
l = [c for c in string.ascii_lowercase + string.digits]
for p in itertools.product(l, l, l, l, l): print "".join(p)
' > file
Run Code Online (Sandbox Code Playgroud)
您可以使用嵌套循环,但它会很慢:
for p in {a..z} {0..9}
do for q in {a..z} {0..9}
do for r in {a..z} {0..9}
do for s in {a..z} {0..9}
do for t in {a..z} {0..9}
do echo $p$q$r$s$t
done
done
done
done
done | split -l 65536 --numeric-suffixes=1 --additional-suffix=.txt - output
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |