Awk程序来确定最大值

问题描述

我试图确定列S2和S4的最大值,但仅针对具有BBB的相应S1列。 输出将为S2 max = 800和S4 max = 90。 目前有: awk 'BEGIN { FS = " " ; OFS = " "; } { if(NR%3==0){max=$3} { s2+=substr($2,1,3); s4+=substr($4,2) } } ; { $3 >= max } END { print "Max S2 = " s2,"; Max S4 = " s4 } ' file.txt

   S1 S2 S3 S4 
   --- --- - --
   AAA 100 A 99
   BBB 200 B 90
   CCC 300 C 80
   AAA 400 A 70
   BBB 500 B 60
   CCC 600 C 50
   AAA 700 A 40
   BBB 800 B 30
   CCC 900 C 20
   AAA 999 A 10

解决方法

您可以尝试按照链接https://ideone.com/OMoqG8

中显示的示例进行笔试和测试吗?
awk '
$1=="BBB"{
  maxS2=(maxS2>$2?maxS2:$2)
  maxS4=(maxS4>$4?maxS4:$4)
}
END{
  print "max of S2 is:" maxS2 ORS "max of S4 is:" maxS4
}
' Input_file

输出如下:

max of S2 is:800
max of S4 is:90
,

您使用的shell不会有任何区别,不会改变tput flash >/dev/ttys002 的行为方式。它可能会改变您向awk提供变量输入的方式,但是这里的问题不需要任何问题。

在这里,您可以简单地标识包含awk的记录(行),然后跟踪field-2和field-4的最大值,然后使用BBB规则输出结果。您可以使用传统的END三元运算符,如@ RavinderSingh13所使用的那样。传统的if是:

if

使用/输出示例

使用文件名awk '/BBB/{ if ($2 > s2) s2 = $2 if ($4 > s4) s4 = $4 } END{ printf "S2 max=%d and S4 max=%d\n",s2,s4 }' file 中的数据,您可以仅切换到包含file的目录(确保将file更改为输入文件名),然后选择-将上面的鼠标和中间鼠标粘贴到终端中进行测试,例如

file