如何仅对内部列执行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
,将抑制默认行为,并保留这些行的原始顺序。