【发布时间】:2015-05-14 22:45:50
【问题描述】:
下面是一个包含样本和特征信息的玩具文本文件,以及一个测量值。
Sample3_trait1 8.5
Sample6_trait2 2.2
Sample7_trait1 9.2
Sample3_trait2 1.3
Sample6_trait1 10.0
Sample7_trait2 2.1
我想将示例列替换为提供更多信息的内容,例如示例的实际名称(例如人名)。如果只有 3 个样本,这在 sed 中会相对容易,例如
sed 's/Sample3/john.D/g' file.txt
我可以为每个“样本”执行此操作。但我有 100 或数千个样本名称。
id 喜欢做的是给sed 一个包含两列的文本文件,原始的和替换的:
Sample3 john.D
Sample6 mary.D
Sample7 kelly.O
....
Sample1001 amy.P
并将它们替换为整个文件中出现的任何位置(全局),即,无论在哪里找到 Sample3,都替换为 john.D。
这是我可以用 Bash 中的循环来做的事情吗?我可以遍历单个列(逐行),但我不确定如何处理匹配的列。
任何帮助将不胜感激。
【问题讨论】:
-
wrt
wherever they appear-Sample1是否出现在文本Sample10_trait2中?在FooSample1_trait2怎么样?如果任一问题的答案是否定的,那么我们如何识别Samples 的分隔符,例如要匹配的文本是否总是出现在行首并且总是后跟下划线?不,bash 中的循环始终是处理文本的错误方法。