我有一个包含 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