我的文件看起来像这样:
>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列替换以 * >
开头的行* ll,我还想开头有>
!
答案 0 :(得分:2)
我认为这会做你想做的事情:
awk '$0 ~ /^>/ { print ">" $15; next } 1'
它使所有不以>
开头的行保持不变。这是通过使用next
告诉awk跳转到以>
开头的行的情况下的下一条记录来完成的。 1
存在,因为它始终为true,因此对于不以>
开头的任何行,都会调用打印行的默认操作。
答案 1 :(得分:0)
这可能对您有用:
sed 's/^\(\s*\)>\(\S*\s*\)\{15\}.*/\1\2/;s/,\s*$//' file