【发布时间】:2012-02-15 15:08:36
【问题描述】:
我有如下文件:
>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列,我还想有@ 987654328@开头!
【问题讨论】:
-
你关心第 15 个字段的逗号吗?您不会在示例输出中显示它们,即使它们是该字段的一部分。
-
这不是管道分隔的数据吗?如果您在谈论字段,则需要不同的字段分隔符。另外,使用 perl 会不会容易很多?
-
@tchrist 如果您查看数据,它似乎是空格分隔的字段;一开始我也很困惑。看到它在 awk 中是微不足道的,我无法想象它在 perl 中会容易得多。
-
@MichaelJ.Barber
for循环让我觉得在 perl 中比在 awk 中更容易,因为 perl 在不需要的地方有更高级的正则表达式,但我看到了毕竟实际上并不需要。