在 awk 中对哈希/数组进行排序
Posted
技术标签:
【中文标题】在 awk 中对哈希/数组进行排序【英文标题】:sorting hashes/arrays in awk 【发布时间】:2010-09-11 12:17:56 【问题描述】:有没有一种简单的方法可以在 awk 中执行以下任何操作?
按数据排序数组/哈希 按字符串键对哈希进行排序【问题讨论】:
这是一个本地 awk 快速排序的示例:en.literateprograms.org/Quicksort_(AWK) 抱歉,这个站点似乎没有任何通知,否则我会早点收到的。希望你能看到。 netlib.org/research/awkbookcode/ch7 这是 awk(以及更多)中插入排序的链接。 【参考方案1】:这是其他人对一个非常相似的问题的回答: http://www.computing.net/answers/unix/urgent-help-with-sorting-in-awk/4442.html
应该是这样的:
gawk 'BEGIN c=1 array[c] = sprintf ("%s %s", $2, $1); c++
END asort(array); for (x=1;x<c;x++) print array[x] '
请注意,我使用了“gawk”。如果您想要内置排序,请使用 gawk。
该示例采用键值对的“空格分隔”输入并根据第二个值对它们进行排序(当然,它以值/键格式将它们打印出来,但你会看到我在那里做什么。)
为了对 gawk 中现有的数组执行此操作,您可以使用类似的东西。
如果使用 awk 或 mawk,您必须使用手册页中提供的众多排序功能之一来完成排序。
来自 gawk 联机帮助页: AWK 中的所有数组都是关联的,即由字符串值索引。 特殊运算符 in 可用于 if 或 while 语句,以查看数组是否具有由 a 组成的索引 特定的价值。 if(数组中的val) 打印数组[val] 如果数组有多个下标,则在数组中使用(i, j)。
【讨论】:
这花了我一点时间,我以前做过类似的事情,但那是很久以前的事了。有趣的部分是通过正则表达式分离输入,然后对其进行排序。以上是关于在 awk 中对哈希/数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章