カテゴリー
【実践!CSVデータ検索スクリプト作成編】条件を与えて検索結果をCSVデータで出力するスクリプト
※ 当ページには【広告/PR】を含む場合があります。
2021/04/10
2022/08/07
はじめに
作成するスクリプトツールの概要
employee.csv
$ cat <<EOF > employee.csv
山下モゲ雄,営業部,本社,3年
島田フガ子,経理部,名古屋支部,15年
岡田ピポ太,製造部,山口工場,8年
佐藤ゴバ文,製造部,山口工場,11年
沢口モフ代,人事部,本社,4年
銭形ガメ吉,海外部,メキシコ支部,11年
上岡ムメ美,営業部,本社,23年
京谷マハ次,製造部,山口工場,3年
園田フマ由,人事部,本社,17年
山田ケム紀,営業部,本社,15年
田川ポゥ子,製造部,ベトナム工場,12年
満田クタ郎,営業部,本社,2年
島寺ルン大,営業部,本社,18年
香下ウル蔵,製造部,山口工場,5年
田頭モフ雄,営業部,名古屋支部,16年
蒲田ウオ奈,海外部,メキシコ支部,9年
郷田ポポ生,営業部,名古屋支部,4年
梅岡ボル伍,経理部,本社,25年
亀川ヲル士,製造部,山口工場,14年
EOF
$ ./simple_finder.sh -l '山田','佐藤','モフ雄' employee.csv
#山田の項目...
#佐藤の項目...
#モフ雄の項目...
Bashスクリプトツールの雛形作成
#!/bin/bash
usage_exit() {
echo "USAGE: $(basename $0) [-l key_list] [-h help] [input_file]" 1>&2
exit 1
}
noarg_err() {
echo "ERROR: must provide key_list!" 1>&2
exit 1
}
noinputfile_err() {
echo "ERROR: not allowed input file to be empty!" 1>&2
exit 1
}
while getopts l: OPT; do
case $OPT in
l ) KEY_LIST="$OPTARG"
;;
\? ) usage_exit
;;
esac
done
shift $((OPTIND - 1))
if [ -z "$KEY_LIST" ]; then
noarg_err
fi
if [ -z "$1" ]; then
noinputfile_err
fi
echo "FILE: $1, KEY_LIST: ${KEY_LIST}"
simple_finder.sh
$ chmod +x simple_finder.sh
$ ./simple_finder.sh -l '山田','佐藤','モフ雄' employee.csv
FILE: employee.csv, KEY_LIST: 山田,佐藤,モフ雄
Awkによる検索メソッドの実装
#!/bin/bash
#....
#....中略
#....
echo "FILE: $1, KEY_LIST: ${KEY_LIST}"
#👇①...☆ここから追加
PARR=($(echo "${KEY_LIST}" | tr ',' ' '))
for p in "${PARR[@]}"; do
awk -F"," '
$1 ~ /'"$p"'/ { print $0 }
' $1
done
$ ./simple_finder.sh -l 山田,佐藤,モフ雄 employee.csv
FILE: employee.csv, KEY_LIST: 山田,佐藤,モフ雄
山田ケム紀,営業部,本社,15年
佐藤ゴバ文,製造部,山口工場,11年
田頭モフ雄,営業部,名古屋支部,16年
検索に引っかからない時の措置 〜 N/Aで埋めてみる
$ ./simple_finder.sh -l 山田,佐川,モフ雄 employee.csv
FILE: employee.csv, KEY_LIST: 山田,佐川,モフ雄
山田ケム紀,営業部,本社,15年
田頭モフ雄,営業部,名古屋支部,16年
#N/A
#!/bin/bash
#....
#....中略
#....
echo "FILE: $1, KEY_LIST: ${KEY_LIST}"
#👇①...☆Awkスクリプト部分を編集
PARR=($(echo "${KEY_LIST}" | tr ',' ' '))
for p in "${PARR[@]}"; do
awk -F"," '
$1 ~ /'"$p"'/ { last_macthed = $0; }
END { print last_macthed ? last_macthed : "'"$p"'?,#N/A,#N/A,#N/A"; }
' $1
done
$ ./simple_finder.sh -l 山田,佐川,モフ雄 employee.csv
FILE: employee.csv, KEY_LIST: 山田,佐川,モフ雄
山田ケム紀,営業部,本社,15年
佐川?,#N/A,#N/A,#N/A
田頭モフ雄,営業部,名古屋支部,16年
まとめ
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー