在多列中拆分一列分隔文本

时间:2018-05-17 01:01:14

标签: linux awk sed bioinformatics

我有一个如下文件。

chr1     15431658     A     T      GT:AD:DP:GQ:PL           0/1:15,20:35:66:211,0,222

我想要一个输出,我可以将第6列分隔为“:”。我怎么能在awk中这样做。

这是我想要的输出

chr1    15431658   A   T    GT:AD:DP:GQ:PL      0/1   15,20   35   66   211,0,222

2 个答案:

答案 0 :(得分:2)

关注awk可能对您有帮助。

awk -F"[[:space:]]+" '{gsub(/:/,"\t",$NF)} 1' OFS="\t"   Input_file

答案 1 :(得分:1)

只需使用以下awk命令:

echo 'chr1     15431658     A     T      GT:AD:DP:GQ:PL           0/1:15,20:35:66:211,0,222' | awk '{$6=gensub(/:/,"\t","g",$6); print $0}' | column -t
chr1  15431658  A  T  GT:AD:DP:GQ:PL  0/1  15,20  35  66  211,0,222

您可以在替换调用中将\t替换为您需要的空间,最后但并非最不重要,因为如果您希望tab分隔列或空格分隔列,则不会在帖子中指定。{1}}我没有考虑到这一点,你可以通过以下方式更改awk命令来配置它(OFS="YOUR SEPARATOR"):

awk 'BEGIN{OFS="\t"}{$6=gensub(/:/,"\t","g",$6); print $0}'