2 つの .csv ファイルがあります。最初のファイルには名前列のリストがあり、2番目のファイルにはすべての列の名前とその値を含む60列があります。最初のファイルの名前から2番目のファイルの名前と値まで検索したいと思います。
たとえば、
最初のファイル:
Column 1
Polaromonas
uncultured
Leptothrix
Clostridium
Methylocystis
2番目のファイル:
Column 1 Column 2 Column 3 Column 4 Column 5 Column 6
NP NT CT
Methylocystis 34 Desulfonema 0 Methylocystis 23
uncultured 67 Chlorobium 43 Clostridium 12
Clostridium 23 Rhodovulum 45 Rhodovulum 12
Leptothrix 32 Azohydromonas 12 Azohydromonas 45
Polaromonas 21 Allochromatium 23 Allochromatium 0
出力例:
NP NT CT
Polaromonas 21 0 0
uncultured 67 0 0
Leptothrix 32 0 0
Clostridium 23 43 12
Methylocystis 34 0 23
答え1
script.shに入れて実行してください。./script.sh 最初と2番目
#!/bin/bash
TOFIND=($(cat "$1" | tail -n +2))
COLUMNS=()
for ((I=0; I<3; ++I))
do
COLUMNS+=("$(cat "$2" | tail -n +3 | awk -F' ' '{print $'$((2*$I+1))',$'$((2*$I+2))'}')")
done
RESULT=()
echo -e "\tNP\tNT\tCT"
for ELEM in "${TOFIND[@]}"
do
echo -ne "$ELEM"
for COLUMN in "${COLUMNS[@]}"
do
VAL="$(echo "$COLUMN" | grep "$ELEM")"
if test -z "$VAL"
then
VAL=0
else
VAL="$(echo "$VAL" | awk -F' ' '{print $2}')"
fi
echo -ne "\t$VAL"
done
echo ""
done