You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于特定模式匹配对应csv与tag文件并生成正确组合?

匹配CSV与对应TAG文件的正确组合

现有文件组

CSV文件(组#1)

Axiom_AgDivMS2_apple.r1.annot.csv
Axiom_AgDivMS2_favabean.r1.annot.csv
Axiom_AgDivMS2_gardenpea.r1.annot.csv
Axiom_AgDivMS2_pear.r1.annot.csv
Axiom_AgDivMS2_white_lupin.r1.annot.csv

TAG文件(组#2)

feverole_Axiom_AgDivMS2_apple.tag        lupin_Axiom_AgDivMS2_apple.tag        poire_Axiom_AgDivMS2_apple.tag        pois_Axiom_AgDivMS2_apple.tag        pomme_Axiom_AgDivMS2_apple.tag
feverole_Axiom_AgDivMS2_favabean.tag     lupin_Axiom_AgDivMS2_favabean.tag     poire_Axiom_AgDivMS2_favabean.tag     pois_Axiom_AgDivMS2_favabean.tag     pomme_Axiom_AgDivMS2_favabean.tag
feverole_Axiom_AgDivMS2_gardenpea.tag    lupin_Axiom_AgDivMS2_gardenpea.tag    poire_Axiom_AgDivMS2_gardenpea.tag    pois_Axiom_AgDivMS2_gardenpea.tag    pomme_Axiom_AgDivMS2_gardenpea.tag
feverole_Axiom_AgDivMS2_pear.tag         lupin_Axiom_AgDivMS2_pear.tag         poire_Axiom_AgDivMS2_pear.tag         pois_Axiom_AgDivMS2_pear.tag         pomme_Axiom_AgDivMS2_pear.tag
feverole_Axiom_AgDivMS2_white_lupin.tag  lupin_Axiom_AgDivMS2_white_lupin.tag  poire_Axiom_AgDivMS2_white_lupin.tag  pois_Axiom_AgDivMS2_white_lupin.tag  pomme_Axiom_AgDivMS2_white_lupin.tag

需求

将TAG文件中带有*_apple.tag、*_favabean.tag等后缀的文件,与CSV文件中含对应关键词(如apple)的文件匹配。例如所有含apple的TAG文件,仅匹配Axiom_AgDivMS2_apple.r1.annot.csv。

已实现的关键词提取脚本

可从CSV文件名中提取匹配关键词:

for i in *.csv
 do a=${i%.r1.annot.csv}; b=${a#*_*_}
 echo $b
done

输出结果:

apple
favabean
gardenpea
pear
white_lupin

当前脚本的问题

使用双层循环会生成所有文件的全组合,而非仅匹配的组合:

for N in *.csv; do   
   for S in *.tag; do     
    echo ${N} ${S};   
   done; 
done

解决方案

方法1:基于CSV提取的关键词过滤TAG文件

利用提取的关键词,精准匹配对应TAG文件:

# 遍历每个CSV文件
for csv_file in *.csv; do
    # 提取匹配关键词(逻辑与现有提取脚本一致)
    base="${csv_file%.r1.annot.csv}"
    keyword="${base#*_*_}"
    # 筛选所有包含该关键词的TAG文件并输出组合
    for tag_file in *"${keyword}".tag; do
        echo "${csv_file} ${tag_file}"
    done
done

该脚本会输出期望的匹配组合,示例:

Axiom_AgDivMS2_apple.r1.annot.csv feverole_Axiom_AgDivMS2_apple.tag
Axiom_AgDivMS2_apple.r1.annot.csv lupin_Axiom_AgDivMS2_apple.tag
Axiom_AgDivMS2_apple.r1.annot.csv poire_Axiom_AgDivMS2_apple.tag
Axiom_AgDivMS2_apple.r1.annot.csv pois_Axiom_AgDivMS2_apple.tag
Axiom_AgDivMS2_apple.r1.annot.csv pomme_Axiom_AgDivMS2_apple.tag

方法2:更通用的映射匹配(适配文件名结构变化)

如果后续文件名结构改变,可先建立关键词与CSV文件的映射,再匹配TAG文件:

# 建立关键词到CSV文件的映射表
declare -A csv_map
for csv_file in *.csv; do
    base="${csv_file%.r1.annot.csv}"
    keyword="${base#*_*_}"
    csv_map["${keyword}"]="${csv_file}"
done

# 遍历TAG文件,匹配对应CSV
for tag_file in *.tag; do
    # 从TAG文件名提取关键词(假设关键词在最后一个_与.tag之间)
    keyword="${tag_file%.tag}"
    keyword="${keyword##*_}"
    # 输出匹配组合
    echo "${csv_map["${keyword}"]} ${tag_file}"
done

若文件名结构变化,只需调整keyword的提取逻辑即可,比如修改${base#*_*_}或${keyword##*_}的匹配规则。

内容的提问来源于stack exchange,提问作者pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:20:00