2016-02-01 29 views
1

我有以下file如何用awk重复行?

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,这只是一种偏好,因为我最熟悉它。

回答

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]) 
    } 
} 
+2

应该是for(i = 1 ...) – karakfa