Kay*_*Kay 2 unix linux bash awk
我有两列如下
ifile.dat
1 10
3 34
1 4
3 32
5 3
2 2
4 20
3 13
4 50
1 40
2 20
Run Code Online (Sandbox Code Playgroud)
我寻找的是在第二列中找到第一列中每个 1,2,3,4,5 的最大值。
ofile.dat
1 40
2 20
3 34
4 50
5 3
Run Code Online (Sandbox Code Playgroud)
我发现有人使用其他程序完成了此操作,例如根据 A 列的每个不同值获取 B 列的最大值
awk似乎是这项任务的主要候选人。只需遍历输入文件并保留一个由第一列值索引的数组,如果第二列的值大于当前存储的值,则存储第二列的值。在遍历结束时迭代数组以打印索引和相应的值
awk '{
if (a[$1] < $2) {
a[$1]=$2
}
} END {
for (i in a) {
print i, a[i]
}
}' ifile.dat
Run Code Online (Sandbox Code Playgroud)
现在结果不会在第一列上按数字排序,但如果需要的话应该很容易修复