如何通过使用awk忽略带有字符的行来找到字段的最大值

  • 本文关键字:最大值 字段 字符 何通过 awk awk
  • 更新时间 :
  • 英文 :


由于我是awk的新手,请帮我提一些建议。我尝试了以下命令来过滤最大值,并忽略第一个&分别来自示例文本文件的最后几行。当我分别尝试时,它们会起作用。

我的查询:

我需要忽略文件中的最后一行和前几行,然后需要使用awk获取字段7的最大值。

我还需要忽略带有字符的行。有人能告诉我两个同时使用这两个命令并获得所需输出的可能性吗。

示例文件:

Linux 3.10.0-957.5.1.el7.x86_64 (j051s784)      11/24/2020      _x86_64_        (8 CPU)

12:00:02 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
12:10:01 AM   4430568  61359128     93.27   1271144  27094976  66771548     33.04  39005492  16343196      1348
12:20:01 AM   4423380  61366316     93.28   1271416  27102292  66769396     33.04  39012312  16344668      1152
12:30:04 AM   4406324  61383372     93.30   1271700  27108332  66821724     33.06  39028320  16343668      2084
12:40:01 AM   4404100  61385596     93.31   1271940  27107724  66799412     33.05  39031244  16344532      1044
06:30:04 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
07:20:01 PM   3754904  62034792     94.29   1306112  27555948  66658632     32.98  39532204  16476848      2156
Average:      4013043  61776653     93.90   1293268  27368986  66755606     33.03  39329729  16427160      2005

使用的命令:

cat testfile | awk '{print $7}'  | head -n -1 | tail -n+7
awk 'BEGIN{a=   0}{if ($7>0+a) a=$7} END{print a}' testfile

预期输出:

Maximum value for the column 7 by excluding the lines wherever alphabet character is available

第一个解决方案(通用解决方案(: 在此处添加一个通用解决方案,将字段名发送到awk变量(我们希望查找其最大值(,它将从第一行自动找到其字段号,并将相应地工作。考虑到你的第一行有你想要查找的字段名。

awk -v var="kbcached" '
FNR==1{
for(i=1;i<=NF;i++){
if($i==var){ field=i }
}
next
}
/kbmemused/{
next
}
{
if($2!~/^[AP]M$/){
val=$(field-1)
}
else{
val=$field
}
}
{
max=(max>val?max:val)
val=""
}
END{
print "Maximum value is:" max
}
' Input_file


第二种解决方案(仅根据所示样本(:请您仅根据所显示样本尝试以下操作。我假设您想要列kbcached的字段值。

awk '
/kbmemfree/{
next
}
{
if($2!~/^[AP]M$/){
val=$6
}
else{
val=$7
}
}
{
max=(max>val?max:val)
val=""
}
END{
print "Maximum value is:" max
}
'  Input_file
awk '$7 ~ ^[[:digit:]]+$/ && $1 != "Average:" { 
max[$7]="" 
} 
END      { 
PROCINFO["sorted_in"]="@ind_num_asc";
for (i in max) { 
maxtot=i 
} 
print maxtot 
}' file    

一个衬垫:

awk '$7 ~ /^[[:digit:]]+$/ && $1 != "Average:" { max[$7]="" } END { PROCINFO["sorted_in"]="@ind_num_asc";for (i in max) { maxtot=i } print maxtot }' file

使用GNU awk,搜索字段7仅为数字且字段1不是"数字"的行;平均值:";在这些实例中,创建一个以字段7为索引的数组条目。最后,按索引升序对数组进行排序。在数组中循环设置一个maxtot变量。max数组中的最后一个条目将是最高的kbcached,因此打印maxtot

相关内容

  • 没有找到相关文章

最新更新