Linux 按一个字段合并行

Linux 按一个字段合并行,linux,awk,merge,Linux,Awk,Merge,我有这样一个文件: readA chr1 229665946 229666155 + ABCB10 NM_012089 exon6 readA chr1 229667383 229667478 + ABCB10 NM_012089 exon7 readA chr1 229675203 229675338 + ABCB10 NM_012089 exon8 readB chr2 229675000 229675888 + KG

我有这样一个文件:

readA    chr1    229665946 229666155 +  ABCB10  NM_012089   exon6
readA    chr1    229667383 229667478 +  ABCB10  NM_012089   exon7
readA    chr1    229675203 229675338 +  ABCB10  NM_012089   exon8
readB    chr2    229675000 229675888 +  KGB09   NM_022158   exon2
readA    chr1    229665946 229675338 +  ABCB10  NM_012089   exon6,exon7,exon8
readB    chr2    229675000 229675888 +  KGB09   NM_022158   exon2
我想按第一列合并它,如下所示:

readA    chr1    229665946 229666155 +  ABCB10  NM_012089   exon6
readA    chr1    229667383 229667478 +  ABCB10  NM_012089   exon7
readA    chr1    229675203 229675338 +  ABCB10  NM_012089   exon8
readB    chr2    229675000 229675888 +  KGB09   NM_022158   exon2
readA    chr1    229665946 229675338 +  ABCB10  NM_012089   exon6,exon7,exon8
readB    chr2    229675000 229675888 +  KGB09   NM_022158   exon2

因此,第一列和染色体位置被合并,我试图通过awk或bedtool合并来解决这个问题,但失败了。有人能帮我吗?非常感谢

以下内容可能会对您有所帮助

awk '{a[$1]=a[$1]?a[$1] OFS $NF:$0} END{for(i in a){print a[i]}}' OFS=,   Input_file

欢迎来到SO,当你说你试图修复某个问题时,请在代码标签中将该尝试也添加到你的帖子中。@Charlie,酷,看看这是当有人帮助时我们必须做的,谢谢!我不知道如何在awk中使用数组,所以起初我尝试将文件拆分成几个tmp文件,然后进行排序、grep等,但这种方法显然更快!但是,除了用逗号合并最后一列之外,我还想合并染色体区域。我运行了你的代码,但染色体区域没有合并。@Charlie,哪一个是染色体字段,请确认一次?每行3美元是染色体区域的起点,4美元是停止点。在这种情况下,我想打印:readA chr1 line\u 1\u start line\u 3\u end+ABCB10 NM\u 012089 exon6、exon7、exon8