Unix仅对内部键/列进行随机排序



如何仅对内部列执行Unix排序?

下面的语句似乎是合理的,但它意外地忘记了第一个随机化步骤:它在重复时产生相同的输出。

$ sort --random-sort test.txt | sort --key=2,2
1 a 2
2 a 1
1 b 2
2 b 1

顺便说一句,我的兴趣最终是创建分层随机样本(首先需要随机化和分组)。

如果您希望保留一些随机性,您需要将--stable选项添加到第二个排序:

$ sort --random-sort test.txt | sort --key=2,2 --stable
2 a 1
1 a 2
1 b 2
2 b 1
$ sort --random-sort test.txt | sort --key=2,2 --stable
1 a 2
2 a 1
1 b 2
2 b 1

这是由gnu.org/记录的

一对行的比较如下:sort比较每对字段,按照命令行上指定的顺序关联的排序选项,直到找到差异或没有字段剩下的。如果未指定键字段,则sort使用默认键整条线路最后,作为最后的手段,当所有键进行比较时equal,sort比较整行,就好像除了--指定了reverse(-r)。--stable(-s)选项禁用这种最后的比较,以便所有字段进行比较的行相等按其原始相对顺序保留--unique(-u)选项还禁用最后手段比较。

换句话说,在您的情况下,如果在键=2,2下两行比较相同,则默认情况下,sort将忽略您的键选择并比较整行。通过指定--stable,将抑制默认行为,并保留这些行的原始顺序。

相关内容

  • 没有找到相关文章

最新更新