Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk-从变量附加字段_Awk - Fatal编程技术网

awk-从变量附加字段

awk-从变量附加字段,awk,Awk,第一篇文章在这里,这是一个很好的问题 我有一个文件如下所示: Motif name class from to strand sequence score >ENSBTAG00000000436 MA0079.2 SP1 Zinc-coordinating 29 38 - agggggtggg 6.33 ... (50 similar lines) >ENSBTAG00000000380

第一篇文章在这里,这是一个很好的问题

我有一个文件如下所示:

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开头的行中。。。i、 e

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)

有人能建议最好的方法吗

谢谢


Iain未经测试,但类似的内容应该与您想要的内容非常接近:

awk '/^>ENSBTAG/{tag=$0;}/^MA/{print $0,tag}'
也就是说,如果该行与行首“>ENSBTAG”匹配,则将该行保存在变量中,但如果该行与行首的“MA”匹配,则打印添加了最新标记的行


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

此一行将提供以下输出(请参阅测试)。第一行
“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

谢谢这是一个很好的方法,与我的方法完全不同,也很有教育意义。谢谢Kent。这也很棒。我没有想到要像你们两个一样使用正则表达式。需要改进我的方法!:-)