如何仅在内部列上执行Unix排序?
以下陈述似乎是合理的,但它意外地忘记了第一个随机化步骤:它在重复时产生相同的输出。
$ sort --random-sort test.txt | sort --key=2,2
1 a 2
2 a 1
1 b 2
2 b 1
顺便说一句,我的兴趣是最终创建分层随机样本(首先需要随机化和分组)。
答案 0 :(得分: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比较每对 字段,按照命令行中指定的顺序,根据 相关的排序选项,直到找到差异或没有字段 离开了。如果未指定任何键字段,则排序使用默认键 整条线。 最后,作为所有键比较的最后手段 等于,排序比较整行,好像没有除了之外的排序选项 指定了--reverse(-r)。 --stable(-s)选项禁用此最后的比较,以便所有字段比较相等的行 保留原始相对顺序。 - - ((u)选项 还会禁用最后的比较。
换句话说,在你的情况下,如果两行在key = 2,2下比较相同,默认情况下sort
将忽略你的键选择并比较整行。通过指定--stable
,将禁止默认行为,并为这些行保留原始顺序。