将一列分隔文本拆分为多列
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
我有一个如下所示的文件。
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