あるファイルから別のファイルに名前とその値のリストを検索しますか?

あるファイルから別のファイルに名前とその値のリストを検索しますか?

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

おすすめ記事