【发布时间】:2020-05-04 18:55:11
【问题描述】:
我正在尝试替换一行上的字符串,前提是下一行具有特定字符串。
我有:
13963 12602 gene
13963 12602 rRNA
结果需要是
13963 12602 rRNA
13963 12602 rRNA
数字不同的地方... 所以我尝试了:
VAR_1=$1
if [grep rRNA -B1 $1 |awk '{print $3}' |head -n1 ='gene']
then
sed 's/gene/rRNA'
fi
我得到了
line 5: [grep: command not found
head: =gene]: No such file or directory
而且我不知道从这里去哪里......
【问题讨论】:
-
所以一切都是硬编码的?如果下一行是
rRNA并且这一行有gene则将gene更改为rRNA? -
是的。就是这样。
-
如果只是总是打印
rRNA作为第三个字段不是你所需要的,那么edit你的问题是提供更具代表性的样本输入和预期输出,包括第三个输出字段不能为rRNA的情况。现在awk '{$3="rRNA"}1' file会从您的样本输入中产生您预期的输出,所以如果这还不是全部,那么这不是一个很好的例子。 -
必须
gene,或rRNA,或两者,必须是完整字,或者它们可以是较长字的子串?例如eugene或generic- 这算作gene吗?另外-假设您真的是指“完整的单词”-它们总是在行尾,还是可以出现在任何地方?gene是否可以多次出现,如果是,是否需要替换该行上的所有出现?gene和rRNA是否可以出现在同一行上,如果可以,所需的处理方式是什么? -
... 顺便说一句 - 这两行的数字是否需要匹配?还是您的样本中纯属巧合?