确定最大值的 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
我正在尝试确定 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