カテゴリー
【実践!CSVデータ検索スクリプト作成編】CSV形式で与えてある検索条件ファイルから検索結果を出力するスクリプト
※ 当ページには【広告/PR】を含む場合があります。
2021/04/11
はじめに
スクリプトツールの概要
-l
$ ./simple_finder.sh -l 山田,佐藤,モフ雄 employee.csv
山田の項目...
佐藤の項目...
モフ雄の項目...
山田
佐藤
モフ雄
$ ./simple_finder.sh -i search_list.csv employee.csv
山田の項目...
佐藤の項目...
モフ雄の項目...
ツールスクリプトの拡張
search_list.csv
employee.csv
$ cat <<EOF > search_list.csv
山田
佐藤
モフ雄
EOF
$ cat << EOF > employee.csv
山下モゲ雄,営業部,本社,3年
島田フガ子,経理部,名古屋支部,15年
岡田ピポ太,製造部,山口工場,8年
佐藤ゴバ文,製造部,山口工場,11年
沢口モフ代,人事部,本社,4年
銭形ガメ吉,海外部,メキシコ支部,11年
上岡ムメ美,営業部,本社,23年
京谷マハ次,製造部,山口工場,3年
園田フマ由,人事部,本社,17年
山田ケム紀,営業部,本社,15年
田川ポゥ子,製造部,ベトナム工場,12年
満田クタ郎,営業部,本社,2年
島寺ルン大,営業部,本社,18年
香下ウル蔵,製造部,山口工場,5年
田頭モフ雄,営業部,名古屋支部,16年
蒲田ウオ奈,海外部,メキシコ支部,9年
郷田ポポ生,営業部,名古屋支部,4年
梅岡ボル伍,経理部,本社,25年
亀川ヲル士,製造部,山口工場,14年
EOF
#!/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
}
selecteither_err() {
echo "ERROR: should select an option from -l/-i!" 1>&2
exit 1
}
noinputfile_err() {
echo "ERROR: not allowed input file to be empty!" 1>&2
exit 1
}
while getopts l:i: OPT; do
case $OPT in
l ) KEY_LIST="$OPTARG"
;;
i ) KEY_LIST_FILE="$OPTARG"
;;
\? ) usage_exit
;;
esac
done
shift $((OPTIND - 1))
if [ -z "$KEY_LIST" ] && [ -z "$KEY_LIST_FILE" ]; then
noarg_err
elif [ -n "$KEY_LIST" ] && [ -n "$KEY_LIST_FILE" ]; then
selecteither_err
elif [ -z "$1" ]; then
noinputfile_err
fi
echo "FILE: $1, KEY_LIST: ${KEY_LIST}, KEY_LIST(FILE): ${KEY_LIST_FILE}"
if [ -n "$KEY_LIST" ]; then
#👇①...☆前回のスクリプト
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
elif [ -n "$KEY_LIST_FILE" ] && [ -f "$KEY_LIST_FILE" ]; then
#👇②...☆今回拡張するスクリプト
cat "$KEY_LIST_FILE" | while read KEY || [ -n "${KEY}" ]; do
awk -F"," '
$1 ~ /'"$KEY"'/ { last_macthed = $0; }
END { print last_macthed ? last_macthed : "'"$KEY"'?,#N/A,#N/A,#N/A"; }
' $1
done
fi
while read
動作の確認
$ chmod +x simple_finder.sh
$ ./simple_finder.sh -i ./search_list.csv employee.csv
FILE: employee.csv, KEY_LIST: , KEY_LIST(FILE): ./search_list.csv
山田ケム紀,営業部,本社,15年
佐藤ゴバ文,製造部,山口工場,11年
田頭モフ雄,営業部,名古屋支部,16年
$ chmod +x simple_finder.sh
$ ./simple_finder.sh -i ./search_list.csv employee.csv
FILE: employee.csv, KEY_LIST: , KEY_LIST(FILE): ./search_list.csv
山岡?,#N/A,#N/A,#N/A
谷藤?,#N/A,#N/A,#N/A
田頭モフ雄,営業部,名古屋支部,16年
まとめ
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー