他の列の範囲によって異なる列で最大値を生成する

他の列の範囲によって異なる列で最大値を生成する

以下のような大きなデータセットがあります。

 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

これで、列1の最大値を求めたいと思います。列2が400より小さい値と列2が400より大きい列1の最大値のみを求めたいと思います。 2列と1列には負の値はありません。推定結果は$ 2 = = 400から離れている必要があるため、列2 = = 400は必要ありません。

だから私が望む結果

35.7136 (second column value <400)

35.7337 (second column value > 400)

ベストアンサー1

ユーザーcsvsql~からcsvkit:

csvsql -HS -d' ' --query 'select max(a) from file where b<400' file

タブ区切りコンテンツの場合は-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

列1が負の場合はmax1が設定されていない場合は0に等しいmax1ため、sumを初期化する必要があります。max2$1>max1

おすすめ記事