Bashスクリプトを使用して、各行の最大値(列ヘッダー値または最初の行の同じ列値)を使用して列名を抽出しようとしています。次のコマンドを使用してCSVファイルの各行から最大値を抽出していますが、最大値で列名を印刷する方法が見つかりませんでした。
awk -F ',' '{max=$'$col1';for (i=1;i<=NF;i++) {if ($i > max){max=$i}};print " max: " max}' "$INPUT_PATH/tmp.csv" >>$INPUT_PATH/max1.csv
例:
サンプルCSVデータ:
col1,col2,col3,col4
1,5,2,6
4,0,1,2
1,2,0,0
0,0,7,0
希望の出力:
col4 6 2
col1 4 1
col2 2 2
col3 7 3
上記のコマンドにこれを行う方法はありますか、またはCSVファイルから必要な情報を抽出するより良い方法はありますか?
ベストアンサー1
ミラーの使用(https://github.com/johnkerl/miller)と実行
mlr --c2n merge-fields -a max -r "^[a-z]" -o value -k then put '
for (key, value in $*) {
if (value == $value_max && key != "value_max") {
$fieldName=key;
}
}' then cut -f fieldName,value_max then reorder -f fieldName,value_max input.csv
あなたはやる
col4 6
col1 4
col2 2
col3 7