使用awk查找文本文件中的最大值列表

时间:2015-04-19 17:54:19

标签: arrays awk syntax max

我是awk的新手,我无法弄清楚我正在处理的任务的正确语法。

我有一个看起来像这样的文本文件(内容总是排序但不总是相同,所以我不能硬编码数组的索引):

27 abc123
27 abd333
27 dce123
23 adb234
21 abc789
18 bcd213

显然最大值是27.但是,我希望我的输出为:

27 abc123
27 abd333
27 dce123

而不是第一行。

第二列就在那里,我的代码总是根据第一列对文本文件进行排序。

我的代码现在将max设置为第一个值(例如27),并且当它读取行时,它仅存储具有最大值的行,并最终打印出输出。

awk 'BEGIN {max=$1} {if(($1)==max) a[NR]=($0)} END {for (i in a) print a[i]}' file

1 个答案:

答案 0 :(得分:1)

您无法读取BEGIN块中的字段,因为它是在读取文件之前执行的。

要查找第一条记录,请使用模式NR == 1NR是当前记录的编号。要查找其他记录,只需检查$1是否等于最大值。

NR == 1 { max = $1 }
$1 == max { print }

由于您的输入始终是排序的,因此您可以在读取具有最大值的所有记录后退出来优化此程序:

$1 != max { exit }