awk - 确定最大值的 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,1,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
解决方案
您使用的外壳不应该有任何区别,它不会改变awk
行为方式。它可能会改变您向 提供变量输入的方式awk
,但您的问题在这里不需要任何内容。
在这里,您可以简单地识别包含的记录(行)BBB
,然后跟踪 field-2 和 field-4 的最大值,然后使用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
示例使用/输出
使用 filename 中的数据file
,您可以更改到包含的目录file
(确保更改file
为输入文件名),然后在上面选择复制和鼠标中键粘贴到终端进行测试,例如
$ 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
S2 max=800 and S4 max=90
推荐阅读
- python - PyGame:Char 不动
- python - 如何将 Hours Minutes 和 seconds 放入数据框中,而不是 Year 、months 和 days ?
- javascript - FirebaseAuth.getInstance().signOut() 没有将用户注销
- javascript - Default function parameters doesn't work as I expected
- angular - 从服务器端接收到值后停止 setinterval
- p5.js - How can I add the P5-property to a s.Vector object?
- apache - Rewrite mode doesn't work with virtualhost and symfony4
- python - Sentence generator with words from lists using Python
- python - Python:多行正则表达式问题
- javascript - 如何在 Javascript 中使用 API?