小编Vla*_*ecs的帖子

按照源文件的顺序打印随机行

我有一个包含短句(几个字长)的大文本文件(~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 行,那就不好了。

shell sed awk sort random

6
推荐指数
3
解决办法
1611
查看次数

多行文件洗牌

我有一个文本文件,其中有空行分隔文本块。我想使用 *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 工具来做到这一点。

grep sed awk text-processing

5
推荐指数
3
解决办法
1111
查看次数

打乱字符串中的单词

我有一个带有换行符分隔字符串的文本文件。我的问题是按如下方式处理每一行:通过使用空格作为分隔符来打乱标记的顺序。

例如:

输入: A B C

输出: C A B

重复运行命令/脚本当然应该提供不同的顺序。

我当前的解决方案(对于单个文本行):

$ cat <file> | tr " " "\n" | shuf | tr "\n" " "

是否有一个不错的(更好的)命令行组合来处理多行文本文件?

linux awk text-processing

2
推荐指数
1
解决办法
1199
查看次数

标签 统计

awk ×3

sed ×2

text-processing ×2

grep ×1

linux ×1

random ×1

shell ×1

sort ×1