我有一个包含24个不同文件的文件夹,这些文件都具有相同的制表符分隔格式:
这是一个例子:
zinc-n with-iodide-n 8.0430 X
zinc-n with-amount-of-supplement-n 12.7774 X
zinc-n with-value-of-horizon-n 14.5585 X
zirconium-n as-valence-n 11.3255 X
zirconium-n for-form-of-norm-n 15.4607 X
我想以2的每种可能组合加入文件。
例如,我想加入文件1和文件2,文件1和文件3,文件1和文件4 ......等等,直到我有552个文件的输出加入EACH文件与EACH其他文件考虑所有独特的组合
我知道这可以在例如带猫的终端中完成。
即
cat File1 File2 > File1File2
cat File1 File3 > File1File3
......等等。
但是,为每个独特的组合做这件事将是一个非常费力的过程。
是否可以自动化此过程以使用终端中的命令行加入所有唯一组合,例如grep?或者可能是针对比CAT更优化的解决方案的另一个建议。
答案 0 :(得分:1)
您可以尝试使用python。我使用combinations()
模块中的itertools
函数和join()
每对文件的内容。请注意,我使用缓存来避免多次读取每个文件,但您可能会耗尽内存,因此请使用最佳方法:
import sys
import itertools
seen = {}
for files in itertools.combinations(sys.argv[1:], 2):
outfile = ''.join(files)
oh = open(outfile, 'w')
if files[0] in seen:
f1_data = seen[files[0]]
else:
f1_data = open(files[0], 'r').read()
seen[files[0]] = f1_data
if files[1] in seen:
f2_data = seen[files[1]]
else:
f2_data = open(files[1], 'r').read()
seen[files[1]] = f2_data
print('\n'.join([f1_data, f2_data]), file=oh)
测试:
假设以下三个文件的内容:
==> file1 <==
file1 one
f1 two
==> file2 <==
file2 one
file2 two
==> file3 <==
file3 one
f3 two
f3 three
运行如下脚本:
python3 script.py file[123]
它将创建三个包含内容的新文件:
==> file1file2 <==
file1 one
f1 two
file2 one
file2 two
==> file1file3 <==
file1 one
f1 two
file3 one
f3 two
f3 three
==> file2file3 <==
file2 one
file2 two
file3 one
f3 two
f3 three