首页 > 解决方案 > 如何使用 awk 将单行拆分为多行?

问题描述

输入:

具有可变列数的主要以制表符分隔的文件。有些行有另一个分隔符';'。

输出:

具有相等列的制表符分隔文件,其中行具有“;” 分隔符被放入一个新行。

我的输入如下所示:

chr15   51300184        51300335        Merged-chr15-51300260-2 1       +       chr15   51244653        51308019        CRD_476 1       +
chr15   51307793        51308094        Merged-chr15-51307944-3 1       -       chr15   51244653        51308019        CRD_476 1       +;chr15   51307694        51333253        CRD_477 1       +

我想要的是采用具有';'的行 分隔符并将其与前 6 列中的信息一起推入新行。输出应如下所示:

chr15   51300184        51300335        Merged-chr15-51300260-2 1       +       chr15   51244653        51308019        CRD_476 1       +
chr15   51307793        51308094        Merged-chr15-51307944-3 1       -       chr15   51244653        51308019        CRD_476 1       +
chr15   51307793        51308094        Merged-chr15-51307944-3 1       -       chr15   51307694        51333253        CRD_477 1       +

标签: awk

解决方案


$ awk -F';' '{print $1} NF>1{sub(/([^[:space:]]+[[:space:]]*){5}\+;/,""); print}' file
chr15   51300184        51300335        Merged-chr15-51300260-2 1       +       chr15   51244653        51308019        CRD_476 1       +
chr15   51307793        51308094        Merged-chr15-51307944-3 1       -       chr15   51244653        51308019        CRD_476 1       +
chr15   51307793        51308094        Merged-chr15-51307944-3 1       -       chr15   51307694        51333253        CRD_477 1       +

推荐阅读