魏长东

weichangdong

东邪

awk的asort与asorti数组排序区别

两者排序区别:

  1. asort 是对数组的值进行排序,并且会丢掉原先键值;
  2. asorti是对数组的下标进行排序。

数据文件:

12 34

78 90

23 45

1. awk是关联数组。for…in循环输出时候,默认打印出来是无序数组。

# awk ‘{a[$1]=$2}END{for(i in a) print i,a[i]}’ test

78 90

12 34

23 45

2. asort排序输出

# awk ‘{a[$1]=$2}END{slen=asort(a,b);for(i=1;i<=slen;i++) print i”\t”a[i]“\t”b[i]}’ test

1 34

2 45

3 90

在最后执行命令,END中 asort对数组a的值进行排序,把排序后的下标存入新生成的数组b中,丢弃数组a下标值,再把数组a的长度赋值给变量slen。

b[1]=34

b[2]=45

b[3]=90

此时a已经是空数组。

数组的值是无法直接print(输出)的,使用for循环取出数值的下标,输出排序后的数组b下标值及对应数值

 

3. asorti 排序输出

# awk ‘{a[$1]=$2}END{slen=asorti(a,b);for(i=1;i<=slen;i++) print i”\t”b[i]“\t”a[b[i]]}’ test

1 12 34

2 23 45

3 78 90

在最后执行命令,END中 asorti对数组a的下标进行排序,并把排序后的下标存入新生成的数组b中,并把数组a的长度赋值给变量l。

b[1]=12

b[2]=23

b[3]=78

数组的值是无法直接print(输出)的,使用for循环取出数值的下标,输出排序后的数组b下标值及对应数值,再把数组b的值当作数组a的下标值打印数组a的值