![Linux:使用多个运算符创建文本列表](https://linux22.com/image/23015/Linux%EF%BC%9A%E4%BD%BF%E7%94%A8%E5%A4%9A%E4%B8%AA%E8%BF%90%E7%AE%97%E7%AC%A6%E5%88%9B%E5%BB%BA%E6%96%87%E6%9C%AC%E5%88%97%E8%A1%A8.png)
我想列一个这样的列表:
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 中获得相同的结果。