awk は列ごとにグループ化し、複数の値を合計します。

awk は列ごとにグループ化し、複数の値を合計します。

「名前」および「数量」列と「価格」列に基づいてグループ化しようとしています。サンプルデータは次のとおりです。

names,fruits,qty,price
tom,banana,2,500
tom,banana,3,750
tom,apple,2,500
alex,banana,3,750
alex,melon,3,750
alex,melon,3,750
jess,banana,1,250
jess,banana,1,250
jess,banana,1,250
danny,melon,2,500
danny,apple,2,500
danny,apple,2,500

私は次のコマンドを試しました。

awk -F, 'BEGIN{FS=OFS=","} 
            NR==1{print; next} 
            {
                q=$3; 
                $3="~";
                w=$4; 
                $4="~";
                a[$0]+=q;
                b[$0]+=w
            } 
       END  {
                for(k in a) 
                {
                    sub("~",a[k],k); 
                    sub("~",b[k],k);
                    print k
                }
            }' file

このコマンドを使用すると、「価格」列が空になり、必要な出力は次のようになります。

names,fruits,qty,price
alex,banana,3,750
tom,banana,5,1250
alex,melon,6,1500
jess,banana,3,750
danny,apple,4,1000
danny,melon,2,500
tom,apple,2,500

助けてくれてありがとう。

ベストアンサー1

あなたはできます:

awk -F, -v OFS=, '
 NR==1{ print; next }
 { key=($1 OFS $2) }
 { grpByQty[key]+=$3; grpByPrice[key]+=$4 }
END{ for(key in grpByQty) print key, grpByQty[key], grpByPrice[key] }' infile

おすすめ記事