从依赖于另一列范围的列生成最大值

new*_*ent 2 bash sed awk

我有一个大数据集,如下所示:

 35.7337  408  0.5 
 35.732  407  0.5 
 35.7301  406  0.5 
 35.7281  405  0.5 
 35.7259  404  0.5 
 35.7236  403  0.5 
 35.7212  402  0.5 
 35.7187  401  0.5 
 35.7162  400  0.5 
 35.7136  399  0.5 
 35.711  398  0.5 
 35.7085  397  0.5 
 35.706  396  0.5 
 35.7036  395  0.5 
 35.7013  394  0.5 
 35.6992  393  0.5
Run Code Online (Sandbox Code Playgroud)

现在,我想获得 column1 的最大值;仅在 column2 小于 400 的值和 column2 大于 400 的 column1 的 Max 值中。 column 2 和 column1 中没有负值。不需要第 2==400 列,因为预期结果应远离 $2==400。

所以我想要的输出

35.7136 (second column value <400)

35.7337 (second column value > 400)
Run Code Online (Sandbox Code Playgroud)

pLu*_*umo 5

用户csvsql来自csvkit

csvsql -HS -d' ' --query 'select max(a) from file where b<400' file
Run Code Online (Sandbox Code Playgroud)

对于制表符分隔的内容,使用-t代替-d' '


awk

awk '
    $2<400 && $1>max1{max1=$1}
    $2>400 && $1>max2{max2=$1}
    END {printf "%s (second column value < 400)\n%s (second column value > 400)\n",max1,max2}
' file
Run Code Online (Sandbox Code Playgroud)

如果第 1 列可以为负数,则必须初始化max1and max2,因为如果未设置,则 max1 等于 0 $1>max1