最初と2番目の列で重複した数字を見つけて、3番目の列の数字を合計します。

最初と2番目の列で重複した数字を見つけて、3番目の列の数字を合計します。

次の入力があります。

Fred apples 20
Susy oranges 5
Mark watermellons 12
Robert pears 4
Robert oranges 17
Terry oranges 9

Lisa peaches 7
Susy oranges 12
Mark grapes 39
Anne mangoes 7
Greg pineapples 3
Oliver rockmellons 2
Betty limes 14

私は次の出力が欲しい:

Anne:
         mangoes  7
Oliver:
     rockmellons  2
Greg:
      pineapples  3
Mark:
    watermellons 12
          grapes 39
Terry:
         oranges  9
Susy:
         oranges 17
Lisa:
         peaches  7
Fred:
          apples 20
Robert:
         oranges 17
           pears  4
Betty:
           limes 14

これを行うには、awkコマンドを使用しようとしています。私のコードは次のとおりです

{
lines[$1] = (lines[$1] ? lines[$1] "\n  "   $2 " "  $3 :  $1 ":\n       " $2 " " $3)


    }
    END {
        for (line in lines) print lines[line]
        }

2列目の重複項目を比較して数字を合計したいです。

ベストアンサー1

配列の配列を持つGNU awkを使用してください(gawkバージョン4が必要な場合があります)。

gawk '
    NF  { n[$1][$2] += $3 }
    END {
        for (name in n) {
            print name ":"
            for (fruit in n[name]) 
                printf "%16s %2d\n", fruit, n[name][fruit]
        }
    }
'

おすすめ記事