我正在尝试根据特定位置对文件进行排序,但这不起作用,这是数据和输出。
~/scratch$ cat id_researchers_2018_sample
id - 884209 , researchers - 1
id - 896781 , researchers - 4
id - 901026 , researchers - 15
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 916197 , researchers - 1
~/scratch$ sort -k 28,5 id_researchers_2018_sample
id - 884209 , researchers - 1
id - 896781 , researchers - 4
id - 901026 , researchers - 15
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 916197 , researchers - 1
我想按最后一列中的数字对其进行排序,如下所示:
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15
您打算按第 7 列的数字进行排序。
这可以通过任何一个来完成
或与
这些是等价的。
该
-n
选项指定数字排序(与字典排序相反)。在上面的第二个示例中,n
将作为说明符/修饰符添加到第 7 列。排序键列 的规范
-k 7
将使sort
第 7 列上的行开始排序(从第 7 列到末尾的行)。在这种情况下,由于第 7 列是最后一列,因此仅表示这一列。如果这很重要,您可能想-k 7,7
改用(“从第 7 列到第 7 列”)。如果两个键比较相等,
sort
将使用完整的行作为排序键,这就是我们得到示例中前四行结果的原因。如果您想对第二列进行二次排序,您将使用sort -n -k 7,7 -k 2,2
, 或sort -k 7,7n -k 2,2n
(分别为每列指定比较类型)。同样,如果第 7列和第 2 列在两行之间比较相同,sort
则将使用完整行的字典比较。要对字符位置 29 进行数字排序,该位置对应于示例数据中每行末尾的数值的第一位:
意思是“对第一个字段的第 29 个字符
-k 1.29n
给出的键进行排序(从数字上到行尾)”。上面文本中
-k 7,7n
使用的恰好等价于-k 7.1,7.1n
。要按位置 28 排序,我们需要使用 NUL 分隔符: