我有两个 .csv 文件。第一个文件有一列名称列表,第二个文件有六十列,包括所有列中的名称及其值。我希望从第一个文件中搜索名称到第二个文件中的名称和值。
例如:
第一个文件:
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