我有一个包含短句(几个字长)的大文本文件(~500K 行)。此外,大多数行中都有一些 XML 标记。最后,文本文件在添加标记之前已经排序!添加 XML 标记会更改字母排序,但这是需要的。
我的问题是:如何按照源文件的顺序打印随机行?
我知道我可以只使用 shuf 命令并对结果进行排序。问题是标记会弄乱排序。
我也可以写一个 python
脚本,将文本文件加载到列表中,生成一些随机数,对它们进行排序并将它们用作索引来提取行。如果可能,我更喜欢标准的 *nix 命令行工具。
样本数据:
<CITY>anaconda</CITY> city is in <STATE>montana</STATE>
let's go to <CITY>rome</CITY>
please find <CITY>berlin</CITY>
where is <CITY>cairo</CITY> in <COUNTRY>egypt</COUNTRY>
Run Code Online (Sandbox Code Playgroud)
例如,如果我能拉出第 2 和第 3 行就太好了。第 1,3 和 4 行也不错。如果我得到第 3、1 和 4 行,那就不好了。
我有一个文本文件,其中有空行分隔文本块。我想使用 *NIX 命令行工具在尊重块结构的同时打乱这个文件。换句话说,在输出中,我希望看到块的更改顺序;块内的行和它们的顺序保持不变。
输入文件示例:
line 1
line 2
line 10
line 20
line 30
line 100
line 200
Run Code Online (Sandbox Code Playgroud)
输出文件(混洗后):
line 10
line 20
line 30
line 1
line 2
line 100
line 200
Run Code Online (Sandbox Code Playgroud)
当然,重复运行应该给出不同的块顺序。
文件的第一行总是非空的。没有双空行。文件的最后一行始终为空。
我编写了一个非常简单的 Python 脚本,它读取列表列表中的所有行,对其进行打乱并输出。我很好奇我是否可以使用标准的 *NIX 工具来做到这一点。
我有一个带有换行符分隔字符串的文本文件。我的问题是按如下方式处理每一行:通过使用空格作为分隔符来打乱标记的顺序。
例如:
输入:
A B C
输出:
C A B
重复运行命令/脚本当然应该提供不同的顺序。
我当前的解决方案(对于单个文本行):
$ cat <file> | tr " " "\n" | shuf | tr "\n" " "
是否有一个不错的(更好的)命令行组合来处理多行文本文件?