Please reply an answer by clicking ADD COMMENT below the answer.
csvtk join supports joining 2+ files.
If you have more columns, you can firstly retrieve the columns gene_id and value to a separated files, and then join.
Does the file has column names? If so, you can cut by column names (i.e., GENE, VALUE..), if not, switch flag -H on and use column fields (i.e., 1, 2...)
for f in *.txt; do \
csvtk cut -H -t -f "1,2" "$f" > "$f.gene2value.tsv; \
done
Then join:
csvtk join -H -t -f 1 *.gene2value.tsv