我有一个多 GB 的文件,其中包含 4 行元素,我想将另一个文件中的每 4 行随机化,也就是说,将每 4 行分组并随机化这些集合。有没有简单的方法可以做到这一点?
答案1
如果你正在使用一个较新的 Linux/Unix 发行版,sort
带有一个-R
标志,可以随机化行而不是对它们进行排序。我们可以使用它来创建这个一行解决方案:
awk '{printf("%s%s",$0,(NR%4==0)?"\n":"\0")}' file.txt | sort -R | tr "\0" "\n" > sorted.txt
首先,使用awk
将每 4 行分组,方法是将其替换\n
为\0
。然后我们使用 打乱行次sort -R
,最后使用 恢复换行符tr
。
答案2
这是用 Python 写的。我确信有人也会发布一个 Perl 答案。;-)
/usr/bin/python 的 #! 随机导入 #将这些更改为所需的文件 infile =“/路径/到/输入/文件” outfile =“/路径/到/输出/文件” fh = 文件(输入文件) 内容 = fh.readlines() fh.关闭() chunked = [contents[i:i+4] 对于 i 在 xrange(0, len(contents), 4) 中 随机洗牌(分块) fh = 文件(输出文件,'w') 对于分块中的块: 对于块中的行: fh.写入(行) fh.关闭()
IANA 程序员,所以有人可能会改进这一点,但我测试了一下,它运行良好。