#!/bin/bash
#このスクリプトでは、学名を和名に変換するデータベースを生成する。inputするファイルは鹿児島大学の日本産魚類全種リストを用いる(https://www.museum.kagoshima-u.ac.jp/staff/motomura/jaf.html)
if [ "$1" = "" ]; then echo 'USAGE: bash '$0' <input.url #https://www.museum.kagoshima-u.ac.jp/staff/motomura/20221121_JAFList.xlsx>'; exit ;fi
set -ex
# フォルダ等の設定を読み込み
sdir=$(dirname `readlink -f "$0" || echo "$0"`)
source "$sdir"/config.sh
#データベースのダウンロード
wget -O /tmp/specieslist.xlsx $1
#xlsx2csvのインストール
#pip install --user xlsx2csv
#xlsxをcsvに変換し、学名と和名だけを抽出。
#学名に関して、属名と種小名の2単語のみを抽出したDBの作成
#セル内カンマ、セル内改行に対応させるためawk FPAT, nextを使う
xlsx2csv /tmp/specieslist.xlsx | awk -v FPAT='[^,]*|"[^"]+"' '{
l=l$0;if(l!=""&&split(l,t,"\"")%2==0){l=l" ";next};$0=l;l=""; for(i=1;i<=NF;i++){sub("^\"","",$i); sub("\"$","",$i)};
if($4!="和名なし"){split($5,array," "); print $4"\t"array[1]" "array[2]}
}' > $workdir/db/scientificname2japanesename_2words.csv
#学名に関して、3単語以上の場合においても全てを抽出したDBの作成
#セル内カンマ、セル内改行に対応させるためawk FPAT, nextを使う
xlsx2csv /tmp/specieslist.xlsx | awk -v FPAT='[^,]*|"[^"]+"' '{
l=l$0;if(l!=""&&split(l,t,"\"")%2==0){l=l" ";next};$0=l;l=""; for(i=1;i<=NF;i++){sub("^\"","",$i); sub("\"$","",$i)};
if($4!="和名なし"){print $4"\t"$5}
}' > $workdir/db/scientificname2japanesename_complete.csv
#xlsx2csv -e -d tabを使うのが最も効率的かも?
#xlsx2csv -e -d tab /tmp/specieslist.xlsx |awk -F"\t" '{if($4!="和名なし")print $4"\t"$5}'|awk -F"\t" '{split($2,array," ");print $1"\t"array[1]" "array[2];}' > $workdir/db/scientificname2japanesename_2words.csv
#xlsx2csv -e -d tab /tmp/specieslist.xlsx |awk -F"\t" '{if($4!="和名なし")print $4"\t"$5"\t"$2}' > $workdir/db/scientificname2japanesename_complete.csv
#欠落している種を手動で追加
cat $workdir/db/additional_species_2words.csv >> $workdir/db/scientificname2japanesename_2words.csv
cat $workdir/db/additional_species_complete.csv >> $workdir/db/scientificname2japanesename_complete.csv