2022_11_18_魚種の学名・和名変換dbの作成スクリプト

#!/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

修正後スクリプト

・変換dbを一つに統一し、学名・和名だけでなく、科名も追加。

・xlsx2csvの変換(ダブルクォーテーションを取るなど)をよりエレガント?にした

#!/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"\t"$2;}' > $workdir/db/scientificname2japanesename_complete.csv5

#欠落している種を手動で追加
cat $workdir/db/additional_species_2words.csv >> $workdir/db/scientificname2japanesename_2words.csv
cat $workdir/db/additional_species_complete.csv >> $workdir/db/scientificname2japanesename_complete.csv
  • 2022_11_18_魚種の学名・和名変換dbの作成スクリプト.1669806593.txt.gz
  • 最終更新: 2022/11/30 11:09
  • by 133.11.222.89