Bash:找到第 n 列的最大值,其他列有条件

  • 本文关键字:最大值 其他 有条件 Bash awk
  • 更新时间 :
  • 英文 :


我有一个包含 3 列的沼泽文件,我想找到第三列的最大值,并在它们具有相同的第一列时写入整行。我已经问过我的问题,但现在的问题是我有不止一行的最大数量。现在,我想选择第二列中具有最高值的那个!

我之前的问题

我的数据:

1 234 0.01
1 235 0.05
1 236 0.05
1 237 0.02
2 234 0.09
2 235 0.09
2 236 0.08
2 237 0.05

输出:

1 236 0.05
2 235 0.09

解决方案1st: 您能否尝试以下操作。这将根据Input_file处理第一个字段值的顺序。

awk '
FNR==NR{
b[$1]=a[$1]>$3?b[$1]:$0
a[$1]=a[$1]>$3?a[$1]:$3
next
}
($1 in a){
print b[$1]
delete a[$1]
}
'   Input_file  Input_file

解决方案 2nd:如果您不关心输出中$1(第一个字段(的顺序。

awk '{b[$1]=a[$1]>$3?b[$1]:$0;a[$1]=a[$1]>$3?a[$1]:$3} END{for(i in a){print b[i]}}' Input_file

使用外壳工具:

$ sort -k3nr -k2nr file | uniq -w 5
2 235 0.09
1 236 0.05

如果您的第一列可以匹配一定数量的字符,它就会起作用。man uniq

-w, --check-chars=N
compare no more than N characters in lines

它适用于固定宽度的第一列,例如:

1    Second column
1000 Second column

但不是:

1 Second
1000 Second

最新更新