Sort::Fields 按分隔符排序

语法:

  use Sort::Fields;
  @sorted = fieldsort [3, '2n'], @lines;
  @sorted = fieldsort '\+', [-1, -3, 0], @lines;

  $sort_3_2n = make_fieldsort [3, '2n'], @lines;
  @sorted = $sort_3_2n->(@lines);

说明:

Sort::Fields 自动导入两个方法:fieldsortmake_fieldsort,和两个变量stable_fieldsortmake_stable_fieldsort. make_fieldsort.

第一个参数是被用来作为split操作的一个正则表达式,分隔符是可选的,如果没有提供使用/\s+/.

第二个参数是一个数组引用包括一个或者多个域。默认是字符方式排序,1代表第一个域,2代表第一个域,等等。。 -2代表逆序。 数字方式排序加n。 0意味整行排序,-0意味整行逆序。

The order in which the specifiers appear is the order in which they will be used to sort the data. The primary key is first, the secondary key is second, and so on.

排序的顺序是第一个,第二个,等等。

例子:

  123   asd   1.22   asdd
  32    ewq   2.32   asdd
  43    rewq  2.12   ewet
  51    erwt  34.2   ewet
  23    erww  4.21   ewet
  91    fdgs  3.43   ewet
  123   refs  3.22   asdd
  123   refs  4.32   asdd

  # alpha sort on column 1
  print fieldsort [1], @data;

  123   asd   1.22   asdd
  123   refs  3.22   asdd
  123   refs  4.32   asdd
  23    erww  4.21   ewet
  32    ewq   2.32   asdd
  43    rewq  2.12   ewet
  51    erwt  34.2   ewet
  91    fdgs  3.43   ewet

  # numeric sort on column 1
  print fieldsort ['1n'], @data;

  23    erww  4.21   ewet
  32    ewq   2.32   asdd
  43    rewq  2.12   ewet
  51    erwt  34.2   ewet
  91    fdgs  3.43   ewet
  123   asd   1.22   asdd
  123   refs  3.22   asdd
  123   refs  4.32   asdd

  # reverse numeric sort on column 1
  print fieldsort ['-1n'], @data;

  123   asd   1.22   asdd
  123   refs  3.22   asdd
  123   refs  4.32   asdd
  91    fdgs  3.43   ewet
  51    erwt  34.2   ewet
  43    rewq  2.12   ewet
  32    ewq   2.32   asdd
  23    erww  4.21   ewet

  # alpha sort on column 2, then alpha on entire line
  print fieldsort [2, 0], @data;

  123   asd   1.22   asdd
  51    erwt  34.2   ewet
  23    erww  4.21   ewet
  32    ewq   2.32   asdd
  91    fdgs  3.43   ewet
  123   refs  3.22   asdd
  123   refs  4.32   asdd
  43    rewq  2.12   ewet

  # alpha sort on column 4, then numeric on column 1, then reverse
  # numeric on column 3
  print fieldsort [4, '1n', '-3n'], @data;

  32    ewq   2.32   asdd
  123   refs  4.32   asdd
  123   refs  3.22   asdd
  123   asd   1.22   asdd
  23    erww  4.21   ewet
  43    rewq  2.12   ewet
  51    erwt  34.2   ewet
  91    fdgs  3.43   ewet

  # now, splitting on either literal period or whitespace
  # sort numeric on column 4 (fractional part of decimals) then
  # numeric on column 3 (whole part of decimals)
  print fieldsort '(?:\.|\s+)', ['4n', '3n'], @data;

  51    erwt  34.2   ewet
  43    rewq  2.12   ewet
  23    erww  4.21   ewet
  123   asd   1.22   asdd
  123   refs  3.22   asdd
  32    ewq   2.32   asdd
  123   refs  4.32   asdd
  91    fdgs  3.43   ewet

  # alpha sort on column 4, then numeric on the entire line
  # NOTE: produces warnings under -w
  print fieldsort [4, '0n'], @data;

  32    ewq   2.32   asdd
  123   asd   1.22   asdd
  123   refs  3.22   asdd
  123   refs  4.32   asdd
  23    erww  4.21   ewet
  43    rewq  2.12   ewet
  51    erwt  34.2   ewet
  91    fdgs  3.43   ewet

  # stable alpha sort on column 4 (maintains original relative order
  # among items that compare the same)
  print stable_fieldsort [4], @data;

  123   asd   1.22   asdd
  32    ewq   2.32   asdd
  123   refs  3.22   asdd
  123   refs  4.32   asdd
  43    rewq  2.12   ewet
  51    erwt  34.2   ewet
  23    erww  4.21   ewet
  91    fdgs  3.43   ewet
原文地址:https://www.cnblogs.com/tjxwg/p/2954062.html