
두 개의 .csv 파일이 있습니다. 첫 번째 파일에는 이름 열 목록이 있고 두 번째 파일에는 모든 열의 이름과 해당 값을 포함하여 60개의 열이 있습니다. 첫 번째 파일의 이름부터 두 번째 파일의 이름과 값까지 검색하고 싶습니다.
예를 들어:
첫 번째 파일:
Column 1
Polaromonas
uncultured
Leptothrix
Clostridium
Methylocystis
두 번째 파일:
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 첫 번째와 두 번째
#!/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