繁体   English   中英

如何通过awk命令用同一行的15列替换以>开头的行?

[英]How to replace lines that start with > with the 15 column of the same line by awk command?

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

 >gi|358482566|ref|NW_003766328.1| Gallus gallus breed Red Jungle fowl, inbred line UCD001 unplaced genomic scaffold, Gallus_gallus-4.0 ChrUn_7180000961607, whole genome shotgun sequence
 TCTGTCTCTTGTCACTGTATTGTAGTGTGAACCCCTTAAAGGGAAGACCTGCTCTCCTTTGAAAATGCTT
 GCTCATCTATATGCCTCATGCATACCCTCACTGGCAAAGGAGAGCTGAAGTAATTTTAGGACAGAGGAGT
 ACTAGATTGTA
 >gi|358482565|ref|NW_003766329.1| Gallus gallus breed Red Jungle fowl, inbred line UCD001 unplaced genomic scaffold, Gallus_gallus-4.0 ChrUn_7180000961609, whole genome shotgun sequence
 TTTGACCAATGCATTTCAGCATGTTTTTTGACACTAGGTATGCCATTTGGGATGACAATATCAGTTTCCA
 TTTCCATTAGAGGAAAATAAGGTT 

我想用其第15列替换所有以>开头的行。 我不知道如何用一列替换该行,所以我试图用第15列替换该行的所有列。

所以我期望作为输出:

     >ChrUn_7180000961607
     TCTGTCTCTTGTCACTGTATTGTAGTGTGAACCCCTTAAAGGGAAGACCTGCTCTCCTTTGAAAATGCTT
     GCTCATCTATATGCCTCATGCATACCCTCACTGGCAAAGGAGAGCTGAAGTAATTTTAGGACAGAGGAGT
     ACTAGATTGTA
     >ChrUn_7180000961609
     TTTGACCAATGCATTTCAGCATGTTTTTTGACACTAGGTATGCCATTTGGGATGACAATATCAGTTTCCA
     TTTCCATTAGAGGAAAATAAGGTT 

这些是我的命令:

 awk '{if ($1 ~ />/) for (i=1; i<=19; i++) gsub ($i, $15)}'
 test.fa

当我使用它时,我在文件中做了一些更改,但不是我想要的! 列15已删除!!!

 awk '{if ($1 ~ />/) for (i=1; i<=19; i++) a= $15 gsub($i, a)}'
 gga_ref_Gallus_gallus-4.0_unplaced.fa

当我使用这个我得到这个错误!

awk: (FILENAME=gga_ref_Gallus_gallus-4.0_unplaced.fa FNR=1) fatal: sub_common: buf: can't allocate 521711124992 bytes of memory (Cannot allocate memory)

所以我想要的是在第15列中 将以 * > 开头的行替换为a * ll,而我想在开头仍然保留>

我认为这将满足您的要求:

awk '$0 ~ /^>/ { print ">" $15; next } 1'

它使所有不以>开头的行保持不变。 这是通过使用next告诉awk跳到下一个记录(对于以>开头的行)来实现的。 1在那里是因为它始终为true,因此对于不以>开头的任何行,都会调用打印行的默认操作。

这可能对您有用:

 sed 's/^\(\s*\)>\(\S*\s*\)\{15\}.*/\1\2/;s/,\s*$//' file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM