カテゴリー
【実践!CSVデータ集計スクリプト作成編】複数条件を満たすときのみに集計するスクリプト
※ 当ページには【広告/PR】を含む場合があります。
2021/04/18
はじめに
ツールスクリプトの概要
$ cat << EOF > expenses.csv
山下モゲ雄,営業部,本社,7929
島田フガ子,経理部,名古屋支部,50958
岡田ピポ太,製造部,山口工場,27989
沢口モフ代,人事部,本社,28025
銭形ガメ吉,海外部,メキシコ支部,27497
上岡ムメ美,営業部,本社,17544
京谷マハ次,製造部,山口工場,25383
園田フマ由,人事部,本社,23275
田川ポゥ子,製造部,ベトナム工場,37658
満田クタ郎,営業部,本社,32259
島寺ルン大,営業部,本社,41764
香下ウル蔵,製造部,山口工場,17149
蒲田ウオ奈,海外部,メキシコ支部,25229
郷田ポポ生,営業部,名古屋支部,26683
梅岡ボル伍,経理部,本社,41615
亀川ヲル士,製造部,山口工場,18657
EOF
$ ./add_up_tool.sh expenses.csv
Q1. 集計したい部署を以下 1/2/3/4 から選択してください
1) 営業部 2) 経理部 3) 製造部 4) 海外部
※ 終了は q か c を入力!
>>>3
Q2. 集計したい部署を以下 1/2/3/4 から選択してください
1) 本社 2) 名古屋 3) 山口 4) ベトナム 5) メキシコ
※ 終了は q か c を入力!
>>>4
ベトナム工場 製造部 : ********** 円
条件が複数ある時の集計
#!/bin/bash
#👇連想配列でキーからラベルを取得できるようにする
declare -A branches=(
['1']='営業部'
['2']='経理部'
['3']='製造部'
['4']='海外部'
)
declare -A locations=(
['1']='本社'
['2']='名古屋'
['3']='山口'
['4']='ベトナム'
['5']='メキシコ'
)
#👇集計計算の中身
function Total() {
#👇option1 : 1) 営業部 2) 経理部 3) 製造部 4) 海外部
local b="${branches[$1]}"
#👇option2 : 1) 本社 2) 名古屋 3) 山口 4) ベトナム 5) メキシコ
local l="${locations[$2]}"
local filepath="$3"
cat "$filepath" | awk -F"," '
#👇①集計条件を複数指定
$2 ~ /'$b'/ && $3 ~ /'$l'/ { addup += $4 }
END {print "\n '$b' '$l' : " addup " 円"}
'
}
#👇対話型で操作を2段階に選択できる
function Addup() {
local opt1 opt2
printf "集計したい部署を以下 1/2/3/4 から選択してください\n"
printf "\n 1) 営業部 2) 経理部 3) 製造部 4) 海外部\n\n"
printf "※ 終了は q か c を入力!\n>>>"
read OPT1
case "$OPT1" in
1 | 2 | 3 | 4 ) opt1=$OPT1;;
q | c ) echo "終了"; exit 0;;
* ) printf "ヒント... 1/2/3/4 で入力!\n\n"; Addup $1;;
esac
printf "集計したい勤務地を以下 1/2/3/4/5 から選択してください\n"
printf "\n 1) 本社 2) 名古屋 3) 山口 4) ベトナム 5) メキシコ\n\n"
printf "※ 終了は q か c を入力!\n>>>"
read OPT2
case "$OPT2" in
1 | 2 | 3 | 4 | 5 ) Total $opt1 $OPT2 $1; opt2=$OPT2;;
q | c ) echo "終了"; exit 0;;
* ) printf "ヒント... 1/2/3/4/5 で入力!\n\n"; Addup $1;;
esac
#👇選択時の処理漏れを防ぐ
[ -n "$opt1" ] || [ -n "$opt2" ] && exit 1
}
Addup $1
$./add_up_tool.sh expenses.csv
集計したい部署を以下 1/2/3/4 から選択してください
1) 営業部 2) 経理部 3) 製造部 4) 海外部
※ 終了は q か c を入力!
>>>3
集計したい勤務地を以下 1/2/3/4/5 から選択してください
1) 本社 2) 名古屋 3) 山口 4) ベトナム 5) メキシコ
※ 終了は q か c を入力!
>>>3
製造部 山口 : 89178 円
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー