首页 > 解决方案 > 迭代地找到一个字符串并用bash中表中的相应值替换:问题将输出存储到循环中的变量

问题描述

我还是编码新手,我被卡住了!我有一个包含数百个唯一字符串(名称)的文件,我想用唯一的新字符串(有用的名称)替换它。我在 csv 文件中有“旧”名称和“新”名称,每个所需的替换都在其自己的行上。进行替换的目标文件是“testtree”,它只是一个文本文件。我的目标是提出一个解决方案,该解决方案将遍历每个旧/新对,并将每个旧名称替换为“testtree”文件中各自的新名称。我宁愿继续使用 bash。

样本名称.csv

myotis4703,M_yumanensis_TK4703
myotis4834,M_californicus_TK4834
myotis7111,M_sodalis_TK7111
myotis10123,M_nigricans_TK10123
myotis10319,M_albescens_TK10319
myotis13147,M_keaysi_TK13147

这是我一直在尝试的:

cat sample_names.csv | while read i; do \
    OLD=$(echo ${i} | cut -d, -f1) \
    NEW=$(echo ${i} | cut -d, -f2) \
    sed -i 's/$OLD/$NEW/g' testtree; done

当我尝试使用此命令回显 OLD 和 NEW 变量时:

cat sample_names.csv | while read i; do \
    OLD=$(echo ${i} | cut -d, -f1) \
    echo "The old name is" "$OLD"
    NEW=$(echo ${i} | cut -d, -f2) \
    echo "the new name is" "$NEW"; done

我的表(sample_names.csv)中的每个条目都得到以下信息:

The old name is 
the new name is 

显然,将剪切输出存储在 OLD 和 NEW 变量中存在问题。我已经尝试了所有我能想到的引号、括号等组合,但没有成功。我将不胜感激任何建议!谢谢!

标签: bash

解决方案


\错误是每行的反斜杠,删除这些\

cat sample_names.csv | while read i; do
    OLD=$(echo ${i} | cut -d, -f1)
    echo "The old name is" "$OLD"
    NEW=$(echo ${i} | cut -d, -f2)
    echo "the new name is" "$NEW"; done

推荐阅读