Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何对数组元素排序?_Arrays_Sorting_Awk - Fatal编程技术网

Arrays 如何对数组元素排序?

Arrays 如何对数组元素排序?,arrays,sorting,awk,Arrays,Sorting,Awk,我有一份档案 2001:778:0:1::21 - - [16/Sep/2011:12:30:46 +0300] "GET / HTTP/1.1" 200 44 2001:778:0:1::21 - - [16/Sep/2011:12:30:46 +0300] "GET /favicon.ico HTTP/1.1" 2$ 2001:778:0:1::21 - - [16/Sep/2011:12:30:46 +0300] "GET / HTTP/1.1" 200 44

我有一份档案

     2001:778:0:1::21 - - [16/Sep/2011:12:30:46 +0300] "GET / HTTP/1.1" 200 44
        2001:778:0:1::21 - - [16/Sep/2011:12:30:46 +0300] "GET /favicon.ico HTTP/1.1" 2$
2001:778:0:1::21 - - [16/Sep/2011:12:30:46 +0300] "GET / HTTP/1.1" 200 44
        2001:778:0:1::21 - - [16/Sep/2011:12:32:15 +0300] "GET / HTTP/1.1" 200 66643
        88.222.10.7 - - [17/Sep/2011:23:39:25 +0300] "GET / HTTP/1.1" 200 66643
        88.222.10.1 - - [17/Sep/2011:23:39:25 +0300] "GET /favicon.ico HTTP/1.1" 200 14$
     88.222.10.1 - - [17/Sep/2011:23:39:25 +0300] "GET /favicon.ico HTTP/1.1" 200 14$
     88.222.10.1 - - [17/Sep/2011:23:39:25 +0300] "GET /favicon.ico HTTP/1.1" 200 14$
        88.222.10.7 - - [18/Sep/2011:13:45:39 +0300] "GET / HTTP/1.1" 304 -
我需要数一数重复的IP地址

 awk -F "- -" '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' myFile
所以现在我有了

2001:778:0:1::21 4
88.222.10.7 2
88.222.10.1 3
我想把所有的东西都分类,这样我的结果应该是

  2001:778:0:1::21 4
    88.222.10.1 3
    88.222.10.7 2

但我不知道如何排序数组?有可能做到这一点吗?

对于GNU awk 4.0+来说,这是最简单的,它有一个用于以下方面的机制:

即:

{ dups[$1]++ }
END {
  PROCINFO["sorted_in"] = "@val_num_desc";  # <-- here: Array traversal in
                                            #     numerically descending order
                                            #     of values
  for(num in dups) {
    print num,dups[num]
  }
}

请注意,我删除了自定义字段分隔符,因为它似乎没有必要(如果前导空格的数量不同,甚至是有害的)。如果出于某种原因想要保留它,除了
-t'-rgk2
之外,您还必须为
sort
提供
-b
选项以忽略awk输出中的前导空格。

管道排序是gawk使用
asort
的一个选项。
{ dups[$1]++ }
END {
  PROCINFO["sorted_in"] = "@val_num_desc";  # <-- here: Array traversal in
                                            #     numerically descending order
                                            #     of values
  for(num in dups) {
    print num,dups[num]
  }
}
awk '{dups[$1]++} END{ for(num in dups) {print num,dups[num]}}' filename | sort -t ' ' -rgk 2