我正在尝试打印出一列中的所有最大值
所以输入看起来像这样
John. Marketing. 5000.
Marcus. Manager. 9500.
Jason. SW 9500.
Cindy. Developer. 6000.
我想要的输出是
name: Marcus, sal: 9500.
name: Jason, sal: 9500
到目前为止,我的代码是
BEGIN {a=0}
{
if ($3> a)
max=$3;
output=$1
}
END{
print "name: ", output, "sal:", max
}
答案1
您需要解析文件两次,首先找到最大值,然后用它打印行,例如(假设max
是正数):
解析.awk
NR == FNR && $3 > max { max = $3 }
NR != FNR && $3 == max
像这样运行它:
awk -f paste.awk infile{,}
添加{ print "name:", $1, "sal:", $3 }
到最后一行以parse.awk
更改格式,输出将是:
name: Marcus. sal: 9500.
name: Jason. sal: 9500.
答案2
使用 awk 脚本,您可以执行以下操作:
tst.awk
!max || $3 > max {max=$3; delete array}
$3 == max {array[$0]="name:" OFS $1 OFS "sal:" OFS $3}
END{
for(key in array){
print array[key]
}
}
这样就可以了:
- 如果不存在
max
或小于$3
设置并删除数组max
$3
array
- 如果
$3
等于将max
您的输出存储在数组中 END
在脚本的末尾,对于array
打印中的每个键
如果您的值列表max
不太大,您可以使用该脚本。否则@Thor的回答可能是一个更好的解决方案。