bash - 迭代地找到一个字符串并用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 变量中存在问题。我已经尝试了所有我能想到的引号、括号等组合,但没有成功。我将不胜感激任何建议!谢谢!
解决方案
\
错误是每行的反斜杠,删除这些\
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
推荐阅读
- laravel - 如何使用购物车模型中的函数构造将外键添加到另一个表 laravel。我对 laravell 很陌生,我只是想知道发生了什么
- node.js - Nodejs - 如何在不等待答案的情况下快速获取请求
- python - 将远程 html 文件(AWS 存储桶)中的 html 内容渲染到 django-template
- r - 如何将命名的 data.frame 列表导出到名称为 purrr 的文件
- macos - MacOS Catalina launchd 无法打开输入文件错误
- java - 在 Spring 中使用异步多线程来运行并发任务
- sql - BigQuery SQL 一个从长表到宽表的热编码
- python - 获取 Pandas Dataframe 中每个特征的值不正确的行百分比的最快方法
- python - 所有访问尝试共享相同的 IP 地址 Django-Axes
- php - WordPress 主题遇到严重错误