我有一个看起来像这样的文件:
1 10000 10400 GI.STMC.GAST-EnhA
1 10000 10400 SKIN.PEN.FRSK.FIB.02-EnhA
1 10000 10400 BRN.DL.PRFRNTL.CRTX-EnhA
1 10000 10400 BRN.ANT.CAUD-EnhA
1 10000 10400 HRT.ATR.R-EnhA
1 10200 10400 ESDR.H1.MSC-EnhA
1 10200 10400 GI.ESO-EnhA
1 10200 10400 GI.DUO.SM.MUS-EnhA
1 10200 10400 LNG-EnhA
1 14800 15200 MUS.TRNK.FET-EnhA
我想根据第4列中的注释拆分文件,我可以使用以下代码提取唯一注释:
sort -u file.list > annotation.list # file.list file with the different annotations
我可以将注释中的信息存储在数组中:
mapfile -t myARRAY < annotation.list,
但是,我不知道如何将文件拆分为仅包含注释的不同文件,例如,包括注释&#34; ADRL.GLND.FET-TssA&#34;:
1 713800 714800 ADRL.GLND.FET-TssA
1 762000 763200 ADRL.GLND.FET-TssA
1 948600 948800 ADRL.GLND.FET-TssA
1 1166800 1167400 ADRL.GLND.FET-TssA
1 1208600 1208800 ADRL.GLND.FET-TssA
1 1243400 1243800 ADRL.GLND.FET-TssA
1 1244000 1244200 ADRL.GLND.FET-TssA
1 1284000 1284400 ADRL.GLND.FET-TssA
1 1310200 1310400 ADRL.GLND.FET-TssA
1 1310800 1311200 ADRL.GLND.FET-TssA
我可以grep
使用唯一注释并将其输出到文件中,但我相信这可能是最优雅的方式,
由于
编辑:到目前为止我有这个
mapfile -t myARRAY < annotation.list;
for ann in ${myARRAY}; do
grep ${ann} roadmap.core_active.bed > ${ann}.annotation
done
但是,我只有一个注释
答案 0 :(得分:1)
这将创建您要求的每个注释文件:
awk '{print >$4".annotation"}' file.list
Awk隐式地逐行读取文件。在这里,我们使用print
语句,将其输出重定向到一个文件,该文件的名称由添加了后缀.annotation
的第四个字段组成。
除非有大量不同的注释,否则上述内容将起作用。在这种情况下,您可能会达到打开文件的系统限制。为避免这种情况,我们需要明确地关闭文件:
awk '{fname=$4".annotation"; print>fname; close(fname)}' file.list