【发布时间】:2012-04-21 20:14:02
【问题描述】:
我有一个超过 100 万行的文本文件。单独的行不是很大(每行大约 200-270 个字符)。
我试图在输入中随机选择 60% 的行数,其中每一行都可以在输出中重复。在上面的示例中,我的输出将有 600,000 行,但其中只有 500,000 行可能是唯一的。我还需要在不同的输出文件中根本没有选择的行。任何单独的行都不应该出现在两个输出文件中。
输入文件中的每一行都有如下记录。
- 记录1
- 记录2
- 记录3
- 记录4
- 记录5
- 记录6
- 记录7
如果我想在文件 output1.txt 中选择 5 个随机行,其中每一行都可以重复。可以说以下是选择的行并在 output1.txt 中
- 记录3
- 记录5
- 记录2
- 记录2
- 记录5
剩下的记录应该去output2.txt。
- 记录1
- 记录4
- 记录6
- 记录7
记录的顺序无关紧要。
我认为我可以使用 Java 编写代码来执行此操作,但我想知道我可以使用一些命令或脚本快速完成此操作。我尝试使用 'shuf' 来选择线条,但我怎样才能确保已选择的线条不会出现在我想要获取的第二个输出中。
我正在使用 Linux 机器。欢迎任何建议或cmets。谢谢。
【问题讨论】:
-
whathaveyoutried.com - 你试过什么?这里不是为您编写代码的地方。
-
听起来第一部分很简单(几行简单的 php 行或其他),但第二部分,即分别输出第一部分中没有的部分,使它更难...
-
如果听起来我在找人告诉我代码,我很抱歉。我正在寻找的是已经完成我需要的任何想法或命令。顺便说一句,我已经在问题中写了我尝试了什么。
-
@Ben:正是我被卡住的地方。我可以通过简单地使用“shuf”命令来获得第一部分的输出。
-
你必须澄清并且非常明确。这两个文件究竟应该有什么?如果我对您的解释正确...您正在寻找的数学术语如下:您有一组 100 万个元素,并且您希望“不替换”地选择样本元素。此外,您希望这将您的集合划分为两个集合:拾取和未拾取的元素。实际上,如果您将集合表示为一个数组,您可以打乱数组并将其分成两部分:让前 60% 的元素被选中,而让剩余的 40% 的元素不被选中。有什么问题?