行の最大値を含むCSVファイルから列名(タイトル)を抽出するには?

行の最大値を含むCSVファイルから列名(タイトル)を抽出するには?

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

おすすめ記事