我是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
答案 0 :(得分:1)
您无法读取BEGIN
块中的字段,因为它是在读取文件之前执行的。
要查找第一条记录,请使用模式NR == 1
。 NR
是当前记录的编号。要查找其他记录,只需检查$1
是否等于最大值。
NR == 1 { max = $1 }
$1 == max { print }
由于您的输入始终是排序的,因此您可以在读取具有最大值的所有记录后退出来优化此程序:
$1 != max { exit }