Linux:使用多个运算符创建文本列表

Linux:使用多个运算符创建文本列表

我想列一个这样的列表:

7785237_770x770_de3b540dc13ed50023d17854513b40aa07e50a6a
732308_770x770_ec5c344c0114011a5306b31142ff9b001813f6d6
7430796_800x800_ec0f2e614e2dc460fca7e626d83073c827dc9130
7431018_800x800_7caa40b85c21485c64f2ad509a0d9cc1ed3ba526

解释一下:第一个“_”之前的第一个块只是 0 到 9500000 之间的数字 - 第二个块在两个变量之间变化:“770x770”和“800x800”
最后一个块是 40 个字符长的十六进制块。

所以我想做的就是生成这些所有可能的组合,并将其组合成一行。

我该怎么做呢?不知道是否可以在 BASH 中完成,或者应该在 perl/类似的东西中完成。

答案1

我猜 bash 无法处理这些数量,以防万一你在它解决之前就已经老了。

Python迭代工具可以帮助您创建和组装所有组合。

我建议使用 Python 而不是 Perl,因为这更多的是一项数学任务而不是文本操作任务。

#!/usr/bin/env python

from itertools import combinations_with_replacement

for x in combinations_with_replacement('0123456789abcdef', 40):
    h = ''.join(x)
    for y in xrange(9500001):
        for r in ("770x770", "800x800"):
            print "{0}_{1}_{2}".format(y, r, h)

当然,Python 比 C 慢得多,因此不要期望获得最佳性能。另一方面,不要指望仅用 5 行代码就能在 C 中获得相同的结果。

相关内容