模拟sort多字段排序

data:

PIC aaa 12:00 23
PIC aaa 13:00 34
VOD bbb 02:15 55
VOD vds 03:22 65
VOD vds 04:22 40
VOD abs 05:22 30
DLL rft 15:10 22
IDD kjh 17:06 86
PIC hgf 12:45 30
PIC bbb 11:45 35

 

script1:

#!/bin/awk -f
# asorti对数组的下标进行排序
# 返回数组元素的个数

{
  a[$1][$4]=$0; # M1
}
END {
  for(i=1; i<=asorti(a,b);i++)
    for(j=asorti(a[b[i]],c); j>=1; j--)
      print a[b[i]][c[j]]
}

 

script2:

#!/bin/awk -f

{
  A[$1$4]=$0;B[$1];C[$4] # M2
}
END {
  for(m=1; m<=asorti(B,x); m++)
    for(n=asorti(C,y); n>=1; n--)
      if(x[m]y[n] in A)
        print A[x[m]y[n]]
}

 

result:

DLL rft 15:10 22
IDD kjh 17:06 86
PIC bbb 11:45 35
PIC aaa 13:00 34
PIC hgf 12:45 30
PIC aaa 12:00 23
VOD vds 03:22 65
VOD bbb 02:15 55
VOD vds 04:22 40
VOD abs 05:22 30

 

备注:

# Arrays of arrays

awk 'BEGIN {
  arr["a"]["b"]=1;
  arr["a"]["c"]=2;
  for( i in arr)  # 第一维下标"a"
    for( j in arr[i]) # 第二维下标"b", "c"
      print i,j,arr[i][j]
}'

output:
a b 1
a c 2

 

posted @ 2020-05-21 09:22  bigtree2pingping  阅读(205)  评论(0编辑  收藏  举报