Unix随机排序仅在内部键/列上

时间:2014-01-15 05:30:45

标签: bash sorting random key internal

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

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

$ sort --random-sort test.txt | sort --key=2,2
1 a 2
2 a 1
1 b 2
2 b 1
顺便说一句,我的兴趣是最终创建分层随机样本(首先需要随机化和分组)。

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,将禁止默认行为,并为这些行保留原始顺序。

相关问题