コマンドラインからtsvファイルの3列目が最も大きく、かつ、4列目が最も小さい行を出力したい
具体的には以下のようなtsvファイルが対象
test.tsv
// tsvファイルの3列目が最も大きく、かつ、4列目が最も小さい行を出力したい
xxxx 128.602585 47.06927 263.6026 false false
xxxx 224.301987 47.69094 379.302 false false
xxxx 225.673233 47.60213 355.673218 false false
xxxx 235.9356 47.95737 395.9356 false false
xxxx 246.987518 100 371.987518 true false
xxxx 254.395447 100 434.395447 true false
xxxx 372.219635 100 1012.2196 true false
以下のようにすればOK
3列目の最大値を取得し、3列目が最大値のものを4列目で昇順ソートする
(追記)タブは環境によって上手く区切れたり区切れなかったりしたので一度スペース(" ")に置換してから処理すると安定した、、もっといい方法がある気はする、、
FNAME="test.tsv"
MAX_K3=`cat ${FNAME}/result.tsv | sort -nr -k3 | head -1 | cut -f3`
BEST_TIME_LINE=`cat ${FNAME} | sed -e 's/\t\+/ /g' | awk -F" " '$3 ~ /'${MAX_K3}'/ {print $0}' | sort -n -k4 | head -1`
BEST_TIME=`echo "${BEST_TIME_LINE}" | cut -d" " -f3-4 | tr " " "_"`
$ echo ${BEST_TIME}
100_371.987518
もっといい方法がありそうな気がする、、
参考