1

第一次在这里发帖,这是和 awk 的问题。

我有一个看起来像这样的文件:

Motif name class from to strand sequence score
>ENSBTAG00000000436                         
MA0079.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.33
... (50 similar lines)
>ENSBTAG00000000380                         
MA0113.1 NR3C1 Zinc-coordinating 92 109 - ccagaaagtgcttctccc 7.03
... (57 similar lines)

等等。请注意,>ENSBTA 行是一组记录的“标签”。所以我想要的是将 >ENSBTA 行作为字段附加到以 MA 开头的行中......即

MA0079.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.33 >ENSBTAG00000000436

到目前为止我有

awk '{if (NR>1&&NF==1) genename=$1; if (NR>1&&NF>1) print $0, genename}'

这非常接近,但它没有将 ENST 标识符与正确的行保持一致。因此,参考上面的示例,并非文件第二部分的所有 57 行都得到正确的标识符(ENSBTAG00000000380)。

有人可以建议最好的方法吗?

谢谢

伊恩

4

2 回答 2

1

未经测试,但这样的事情应该接近你想要的:

awk '/^>ENSBTAG/{tag=$0;}/^MA/{print $0,tag}'

这基本上表示如果该行在行首匹配“>ENSBTAG”,则将该行保存在一个变量中,但如果它在行首匹配“MA”,则打印附加最新标签的行。

如果您的记录行并不总是匹配“^MA”(示例中的所有行都匹配,但我不想假设),或者如果标签有时看起来有点不同,您需要修改相应的正则表达式。

于 2012-06-07T12:59:18.893 回答
1

这个 oneliner 会给你以下输出(见测试)。第一行"Motif name class from to strand sequence score"也会被打印出来。

awk '/^>[A-Z]*/{l=$0;next;}{print $0" "l}' file

测试

kent$  cat a
Motif name class from to strand sequence score
>ENSBTAG00000000436
MA0079.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.33
MA0080.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.34
MA0082.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.35
>ENSBTAG00000000380
MA0113.1 NR3C1 Zinc-coordinating 92 109 - ccagaaagtgcttctccc 7.03
MA0113.1 NR3C1 Zinc-coordinating 92 109 - ccagaaagtgcttctccc 7.04
MA0113.1 NR3C1 Zinc-coordinating 92 109 - ccagaaagtgcttctccc 7.05

kent$  awk '/^>[A-Z]*/{l=$0;next;}{print $0" "l}' a
Motif name class from to strand sequence score 
MA0079.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.33 >ENSBTAG00000000436
MA0080.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.34 >ENSBTAG00000000436
MA0082.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.35 >ENSBTAG00000000436
MA0113.1 NR3C1 Zinc-coordinating 92 109 - ccagaaagtgcttctccc 7.03 >ENSBTAG00000000380
MA0113.1 NR3C1 Zinc-coordinating 92 109 - ccagaaagtgcttctccc 7.04 >ENSBTAG00000000380
MA0113.1 NR3C1 Zinc-coordinating 92 109 - ccagaaagtgcttctccc 7.05 >ENSBTAG00000000380
于 2012-06-07T13:11:51.747 回答