如何将列分隔为文本文件中的两个制表符分隔列

时间:2015-11-13 19:16:51

标签: awk sed multiple-columns

我有一个包含5列的输入文件,但我需要将第5列分成两列,因此输出文件总共有6列。

我的输入文件数据如下所示:

chrX    100629986   100630758   -   ENSG00000000003.14.IntrontENST00000373020.8.Intron  
chrX    100630866   100632484   -   ENSG00000000003.14.IntrontENST00000373020.8.Intron  
chrX    100632568   100633404   -   ENSG00000000003.14.IntrontENST00000373020.8.Intron

您注意到第5列在我的所有数据中都有类似的结构,所以我要做的是让我的第5列包含" ENSG00000000003.14.Intron" 和我的第6列包含" tENST00000373020.8.Intron"

然而,并非所有数据都具有.Intron标记,例如:

chrX    100597503   100597531   +   ENSG00000000005.5tENST00000485971.1

但是您会注意到我的所有数据都是" t" ,因此这就是我想用来分隔这些列的内容。我不确定如何为拥有数十万行的数据执行此操作,并且手动执行此操作将花费太长时间。我还需要整个文件以制表符分隔,以便我可以继续进一步处理这些数据。

提前感谢所有人,

2 个答案:

答案 0 :(得分:5)

您可以使用sed插入标签:

sed 's/tENST/\t&/' < input > output

每个tENST字符串都被标签+字符串替换。

对于某些sed版本,您可以尝试使用$'s/tENST/\t&/'(即添加$)。

答案 1 :(得分:2)

使用awk,你会写

awk -F"\t" '{sub(/tENST/, FS "tENST", $5); print}' file > output