如何用awk重复行?

时间:2016-02-01 00:21:03

标签: awk split

我有以下file

var1    10    10,11,13
var2    10    12,20,91
var3    10    6,7
var4    11    4

我希望第三个字段中的所有数字都在不同的行上,但我需要前两个字段保持相同:

var1    10    10
var1    10    11
var1    10    13
var2    10    12
var2    10    20
var2    10    91
var3    10    6
var3    10    7
var4    11    4

我尝试使用:

awk '{ split ($3, a, ","); print $1"\t"$2"\t"a[1]"\n"$1"\t"$2"\t"a[2]"\n"$1"\t"$2"\t"a[3] }' file | awk '{ if (length($3)>1) print $0 }'

但这种效率非常低,每次编码$1$2都很繁琐。如果有人可以请我帮助我,我们将不胜感激。请注意,答案不必限于awk,这只是一个偏好,因为我最熟悉它。

1 个答案:

答案 0 :(得分:3)

#!/usr/bin/awk -f
{
    n = split($3, t, ",")
    for (i=0;++i<=n;){
        printf("%s\t%s\t%s\n", $1, $2, t[i])
    }
}