确定最大值的 awk 程序

Awk Program to Determine Maximum

我正在尝试确定 S2 和 S4 列的最大值,但仅限于具有 BBB 的相应 S1 列。 输出将是 S2 max=800 和 S4 max=90。 目前拥有: awk 'BEGIN { FS = " " ; OFS = " "; } { if(NR%3==0){max=} { s2+=substr(,1,3); s4+=substr(,1,2) } } ; { >= 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

您能否尝试按照 link https://ideone.com/OMoqG8

中显示的示例编写和测试
awk '
=="BBB"{
  maxS2=(maxS2>?maxS2:)
  maxS4=(maxS4>?maxS4:)
}
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 应该没有任何区别,它不会改变 awk 的行为方式。它可能会改变您向 awk 提供变量输入的方式,但您这里的问题不需要任何输入。

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

awk '/BBB/{
    if ( > s2)
        s2 = 
    if ( > s4)
        s4 = 
}
END{
    printf "S2 max=%d and S4 max=%d\n", s2, s4
}' file

示例Use/Output

使用文件名 file 中的数据,您只需切换到包含 file 的目录(确保将 file 更改为您的输入文件名),然后select-copy 和 middle-mouse-paste 进入终端进行测试,例如

$ awk '/BBB/{
>     if ( > s2)
>         s2 = 
>     if ( > s4)
>         s4 = 
> }
> END{
>     printf "S2 max=%d and S4 max=%d\n", s2, s4
> }' file
S2 max=800 and S4 max=90