サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 73 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

条件付き合算シェル

tin
tin
2025-06-12 / 0 コメント / 0 いいね! / 13 読み / 294 文字

1.仕様

以下のデータがあります。
11,121,神奈川県,横浜市,5,4,1,1
11,122,神奈川県,川崎市,6,5,1,1
11,121,神奈川県,横はま市,5,6,1,1
11,123,神奈川県,川崎市,7,7,1,1

1列目と2列目がキーで、キー重複の場合:
5列目と6列目の数字を合算して、3列目と4列目は先頭勝ちで以下のように出力
11,121,神奈川県,横浜市,10,10,2,2

上記の仕様でシェルを用意する。

2.実装

#!/bin/bash

input="input.txt"

awk -F',' '
{
    key = $1 "," $2
    if (!(key in seen)) {
        # 最初に出現した行の3列目と4列目を記録
        col3[key] = $3
        col4[key] = $4
        sum5[key] = $5
        sum6[key] = $6
        sum7[key] = $7
        sum8[key] = $8
        seen[key] = 1
    } else {
        # 既に見たキー:数値だけ加算
        sum5[key] += $5
        sum6[key] += $6
        sum7[key] += $7
        sum8[key] += $8
    }
}
END {
    for (k in seen) {
        split(k, parts, ",")
        print parts[1] "," parts[2] "," col3[k] "," col4[k] "," sum5[k] "," sum6[k] "," sum7[k] "," sum8[k]
    }
}
' "$input" | sort > output.txt

0
  • 0

コメント欄