複数の列の合計

複数の列の合計

複数の合計を計算する必要があります。入力ファイルは次のとおりです。

DATE|NATION|CITY|FILES|REVENUE|FREQUENCY|INVESTMENT
20170807|USA|VIRGINIA|TIMES|1919150|1779|282075
20170807|USA|NYC|ROADS|92877|41|1599
20170808|USA|PENS|ROADS|133001|7|1
20170808|USA|NYC|TIMES|361625|1592|0
  1. uniq(日付)で1ドルにつき5ドルの合計
  2. $4=="TIMES" である各ユニークの合計 $5
  3. 各ユニークの合計は5ドルです。ここで $4=="ROADS"
  4. 各ユニークの合計は5ドルです。ここで $4=="ROADS" と $3=="NYC"
  5. $1 列で並べ替え

私の予想結果

DATE|REV|TIMES|ROADS|ROADS&NYC
20170807|2012027|1919150|92877|92877
20170808|494626|361625|133001|0

1つの列を基準に合計する方法だけを知っています。

awk -F"|" '{FS=OFS="|"}{col[$1]+=$5} END {for (i in col) print i, col[i]}'

ベストアンサー1

awk解決策は次のとおりです。

awk -F'[|]' 'NR>1             { I[$1]+=$5 }
    ($4=="TIMES")             { T[$1]+=$5 }
    ($4=="ROADS")             { R[$1]+=$5 }
    ($4=="ROADS" && $3=="NYC"){ RN[$1]+=$5 }
END{ print "DATE|REV|TIMES|ROADS|ROADS&NYC"
     for (x in I) printf"%d|%d|%d|%d|%d\n", x, I[x], T[x], R[x], RN[x]
}' infile.txt

おすすめ記事