説明する:

説明する:

CSVファイルの特定のフィールドを解析し、一致するパターンに基づいてフィールドを一緒に追加する必要があります。変数を正常に設定したが1〜20個の変数がある場合は、変数を追加する方法を理解するのに役立ちます。 (または、この問題を解決する別のより簡単な方法があるかもしれません。)

ソースファイルコンテンツの例:

Server-Name,Volume-Name,Vol-Size,Logical-Space-In-Use
FTWTRAQNETSQL01,FTWTRAQNETSQL01_e,2008,1989
FTWTRAQNETSQL01,FTWTRAQNETSQL01_f,106,63.698
FTWTRAQNETSQL02,FTWTRAQNETSQL02_e,2008,1989
FTWTRAQNETSQL02,FTWTRAQNETSQL02_f,106,4.155
ftwvocmpsqln01,ftwvocmpsqln01_1,1002,21.047
ftwvocmpsqln01,ftwvocmpsqln01_2,104,55.379
ftwspsqln02,ftwspsqln02_H,501,0
ftwvocmpsqln02,ftwvocmpsqln02_1,1002,20.732
ftwvocmpsqln02,ftwvocmpsqln02_2,104,55.380

出力は、各固有サーバー名に対して、すべてのフィールド3値とすべてのフィールド4値が追加された1行でなければなりません。サーバーには複数のボリュームがあり、最大20個まで可能です。必須ファイルの出力は次のとおりです。

Server-Name,Vol-Size,Logical-Space-In-Use
FTWTRAQNETSQL01,2114,2052.698
FTWTRAQNETSQL02,2114,1993.155
ftwvocmpsqln01,1106,76.426
ftwspsqln02,501,0
ftwvocmpsqln02,1106,76.112

Excelではこれを約7秒で実行できますが、これまでbash(または他のシェル)を使用して自動化するソリューションを見つけることができませんでした。

これはこれまでのフィールド3だけを見たコードです。一意のサーバーの各反復に対して変数を正しく設定しますが、可変数の変数を追加する方法がわかりません。

for i in $( awk -F , '{print $1}' $REPORT | grep -v Server-Name | uniq )
do
    c=0
    for num in $( grep $i $REPORT | awk -F , '{print $3}' )
        do
        eval "var$c=$num";
        c=$((c+1));
    done
done

ベストアンサー1

GNUデータマッシュを使用する:

$ datamash -t, --header-in groupby 1 sum 3,4 < file.csv
FTWTRAQNETSQL01,2114,2052.698
FTWTRAQNETSQL02,2114,1993.155
ftwvocmpsqln01,1106,76.426
ftwspsqln02,501,0
ftwvocmpsqln02,1106,76.112

おすすめ記事