将一列分隔文本拆分为多列

split a column of delimited text in multiple columns

我有一个如下所示的文件。

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

只需使用以下 awk 命令:

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

您可以在替换调用中根据需要用 space 替换 \t,最后但并非最不重要的一点是,如果您想要 tab 分隔列或 space 分隔列。我没有考虑到这一点,您可以通过以下方式更改 awk 命令来配置它 (OFS="YOUR SEPARATOR"):

awk 'BEGIN{OFS="\t"}{=gensub(/:/,"\t","g",); print [=11=]}' 

以下 awk 可能会对您有所帮助。

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