【发布时间】:2019-08-30 17:41:19
【问题描述】:
我正在尝试将多个以逗号分隔的值拆分为行。
我已经在少量使用逗号分隔值的列中实现了它(使用awk),但在我的真实表中,我必须在 80 列中完成。所以,我正在寻找一种迭代方式。
我需要拆分的输入示例:
CHROM POS REF ALT GT_00 C_00 D_OO E_00 F_00 GT_11
chr1 10 T A 2,2 1,1 0,1 1,2 1,0 2
chr1 10 T G 3 2 1 2 0 0
预期输出:
chr1 10 T A 2 1 0 1 1 2
chr1 10 T A 2 1 1 2 0 2
chr1 10 T G 3 2 1 2 0 0
我已经用下面的代码做到了:
awk 'BEGIN{FS=OFS="\t"}
{
j=split($5,a,",");split($6,b,",");
split($7,c,",");split($8,d,",");split($9,e,",");
for(i=1;i<=j;++i)
{
$5=a[i];$6=b[i];$7=c[i];$8=d[i];$9=e[i];print
}}'
但是,正如我之前所说,在我的真实数据中有 80 列(或更多)具有逗号分隔的值。
有没有办法使用迭代?
注意:我需要在 bash 中完成(不是 MySQL、SQL、python...)
【问题讨论】:
-
第 2 行第 5 列应该是 2?
-
@dibery 是的,我弄错了,我刚刚编辑过。谢谢!
-
还能有更多这样的
2,3,4或2,34 -
@Jotne 两种情况,但考虑到一行,单元格中逗号分隔值的数量将相同。在同一行中不可能有一个带有
1,2,3的列和另一个带有1,2的列 -
@kvantour 在 OP 的输入中只需要拆分一系列字段,他/她说这些字段中都有相同数量的逗号