模式与另一行匹配后修改一行,然后用awk删除另一行

Modify a Line after Matching Pattern with Another Line, Then Delete the Other Line with Awk

例如,假设我有以下几行:

1,r,other,columns,....,
4,w,...,
2,w,etc...
3,r
1,w
2,r

我希望我的输出写入文件(或覆盖现有文件)为:

1,r/w,other,columns,....,
4,w,...,
2,r/w,etc...
3,r

最终顺序无关紧要。

逗号分隔符行的第一个“行”是要匹配的模式,一旦匹配,一个将 'r' 和另一个 'w' 作为他们的第二行,我想像上面的例子一样把它们合并成一行。

更新

我已经设法让它与命令一起工作:

awk -F, '{a[]=a[]?a[] OFS :} END{for (i in a) print i FS a[i]}' OFS="/" file

但是,这会删除第二个之后的所有其他列,我该如何保留这些列?

$ cat tst.awk
BEGIN { FS=OFS="," }
{
    key = 
    perms[key] = (key in perms ? perms[key] "/" : "") 
}
 != "" {
    sub(/([^,]*,){2}/,"")
    vals[key] = [=10=]
}
END {
    for (key in perms) {
        print key, perms[key] (key in vals ? OFS vals[key] : "")
    }
}

$ awk -f tst.awk file
1,r/w,other,columns,....,
2,w/r,etc...
3,r
4,w,...,