メモリとリソース管理機能を備えた組み合わせジェネレータ

メモリとリソース管理機能を備えた組み合わせジェネレータ

すべての組み合わせに対して5桁の配列を生成するbashスクリプトがあります。

#!/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

すると、以下が出力されます。

$ ./script.sh
aaaaa
aaaab
aaaac
...

しかし、これは私のコンピュータを停止します。徐々にファイルにデータを書き込む方法はありますか?また、出力をそれぞれ65536行ずつ別のファイルに分割できますか?出力1.txt、出力2.txt、出力3.txtのように?

ご協力ありがとうございます!

ベストアンサー1

シェルから膨大な量のメモリを消費することなく、このような大きな置換を生成することは困難です。

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

おすすめ記事