使用 awk 在文本文件中查找最大值列表
Find a list of max values in a text file using awk
我是 awk 的新手,我不知道我正在处理的任务的正确语法。
我有一个看起来像这样的文本文件(内容总是排序但并不总是相同的,所以我不能硬编码数组的索引):
27 abc123
27 abd333
27 dce123
23 adb234
21 abc789
18 bcd213
显然最大值是 27。但是,我希望我的输出是:
27 abc123
27 abd333
27 dce123
而且不仅仅是第一行。
第二列就在那里,我的代码总是根据第一列对文本文件进行排序。
我的代码现在将最大值设置为第一个值(例如 27),并且在读取行时,它仅将具有最大值的行存储在数组中并最终打印出输出。
awk 'BEGIN {max=} {if(()==max) a[NR]=([=12=])} END {for (i in a) print a[i]}' file
您不能读取 BEGIN
块中的字段,因为它在读取文件之前执行。
要查找第一条记录,请使用模式 NR == 1
。 NR
是当前记录的编号。要查找其他记录,只需检查 </code> 是否等于最大值。</p>
<pre><code>NR == 1 { max = }
== max { print }
由于您的输入总是排序的,您可以通过读取所有具有最大值的记录后退出来优化此程序:
!= max { exit }
我是 awk 的新手,我不知道我正在处理的任务的正确语法。
我有一个看起来像这样的文本文件(内容总是排序但并不总是相同的,所以我不能硬编码数组的索引):
27 abc123
27 abd333
27 dce123
23 adb234
21 abc789
18 bcd213
显然最大值是 27。但是,我希望我的输出是:
27 abc123
27 abd333
27 dce123
而且不仅仅是第一行。
第二列就在那里,我的代码总是根据第一列对文本文件进行排序。
我的代码现在将最大值设置为第一个值(例如 27),并且在读取行时,它仅将具有最大值的行存储在数组中并最终打印出输出。
awk 'BEGIN {max=} {if(()==max) a[NR]=([=12=])} END {for (i in a) print a[i]}' file
您不能读取 BEGIN
块中的字段,因为它在读取文件之前执行。
要查找第一条记录,请使用模式 NR == 1
。 NR
是当前记录的编号。要查找其他记录,只需检查 </code> 是否等于最大值。</p>
<pre><code>NR == 1 { max = }
== max { print }
由于您的输入总是排序的,您可以通过读取所有具有最大值的记录后退出来优化此程序:
!= max { exit }