我如何在bash ubuntu中更改一个包含csv名称列表的txt文件的代码?
我有一个txt文件,其中有几个代码及其元数据。然而,我一直在研究如何用名称更改这些代码 为此,我有一个csv列表,有两列,其中一列是代码,另一列是名称。这些是79 这是我写的剧本草稿:我如何在bash ubuntu中更改一个包含csv名称列表的txt文件的代码?,bash,csv,Bash,Csv,我有一个txt文件,其中有几个代码及其元数据。然而,我一直在研究如何用名称更改这些代码 为此,我有一个csv列表,有两列,其中一列是代码,另一列是名称。这些是79 这是我写的剧本草稿: #这里,变量“Nombre”是Nombre_codigos.csv文件第1列的值,变量“Codigo”是Nombre_codigos.csv文件第2列的值 # #然后,我使用命令sed将“Codigo”的值替换为“Nombre”的值,以读取RAxML_bipartitions_newick.newick文件 #!
#这里,变量“Nombre”是Nombre_codigos.csv文件第1列的值,变量“Codigo”是Nombre_codigos.csv文件第2列的值
#
#然后,我使用命令sed将“Codigo”的值替换为“Nombre”的值,以读取RAxML_bipartitions_newick.newick文件
#!/bin/bash
阅读nombres_codigos.csv
读取时-r行| |[-n$line]]
做
Nombre=“${line%;*}”
Codigo=“${line#*}”
回声“$Nombre”
echo“$Codigo”
阅读RAxML\u bipartitions\u newick.newick
读取时-r行| |[-n“$line”]
做
如果[“$Nombre”==“$Codigo”]
然后
sed-i“s/$Nombre/$Codigo/g”RAxML\u bipartitions\u newick.newick
回声“再采样”
其他的
回声“无再采样”
fi
完成
p、 s:nombres_codigos.csv类似于:
名义上;CodigoEU528205_Floripondio_A56y7;EU528205_F
FJ710459_Floripondio_ABCD;FJ710459_F
EF514777_Floripondio123;EF514777_F
EU528999_Floripondio1;EU528999_F
nombres.sh:第2行:读取:`nombres_codigos.csv':不是有效的标识符
nombres.sh:第21行:语法错误:文件意外结束
But I hope from the file RAxML_bipartitions_newick.newick:
(()()()(EU528205:100005000176948E-6,FJ710459):100005000176948E-6):100005000176948E-6,EF514777)100005000176948E-6)
switch to this:
Could someone help me modifying this, please? Thanks very much.
(()
switch to this:
Could someone help me modifying this, please? Thanks very much.
我不是100%确定您想要完成什么,但是您似乎想从
nombres_codigos.csv
中读取每一行,然后在分号上拆分该行。然后您想检查这两个部分是否相同(这对于接下来的sed
表达式没有意义)
一个直接的,尽管经过清理的重新格式化将是:
#!/bin/bash
while read -r line || [ -n "$line" ]
do
Nombre="${line%;*}" ## separate using bash built-in parameter expansions
Codigo="${line#*;}"
echo "$Nombre"
echo "$Codigo"
if [ "$Nombre" == "$Codigo" ]
then
sed -i "s/$Nombre/$Codigo/g" RAxML_bipartitions_newick.newick
echo "reemplazar"
else
echo "no reemplazar"
fi
done < nombres_codigos.csv
这将使脚本看起来的功能保持一致(例如,使用文件
RAxML\u bipartitions\u newick.newick
中的“$Codigo”
更改“$Nombre”
的所有实例)如果是这样的话,那就改变条件,让我知道你还有什么问题。你面对的是什么?你想通过修改来实现什么?你想把你的代码粘贴到帮助语法错误的地方。e来自nombres_codigos.csv的数据样本,脚本生成的(错误)输出,以及cat中i的(正确)所需输出是危险的uuooc(*不必要地使用cat
),相反,如果要使用循环,则在读取第| |[-n“$line]”行时是;do…done
(|124;[-n“$line”]
部分保护那些无法将'\n'
作为最终字符的文件)我找到了示例行…是的,就是这样--“在文件RAxML_bipartitions_newick.newick中用“$code”更改“$Name”的所有实例”---是我想要做的。只有名称和代码值在一个名为codes_names.csv的csv文件中。我刚刚编辑了这篇文章。上面的更改应该可以让你接近。你可以用
替换<“$1”
并将.csv
文件的名称作为参数传递给脚本。我没有要测试的RAxML\u bipartitions\u newick.newick
文件,但我创建了一个简单的文本文件,其中包含$Nombre
值的行,运行脚本会用相应的$Codigo替换它们de>值。