- <-ready[i]
- log.Infof("writing outbuf %s", seqname)
- io.Copy(out, &outbuf[i])
- log.Infof("writing outbuf %s done", seqname)
- }
- }()
- output.Add(1)
- go func() {
- defer output.Done()
- if bedout != nil {
- for i, seqname := range seqnames {
- <-ready[i]
- log.Infof("writing bedbuf %s", seqname)
- io.Copy(bedout, &bedbuf[i])
- log.Infof("writing bedbuf %s done", seqname)
- }
+ pr, pw := io.Pipe()
+ src[i] = pw
+ merges.Add(1)
+ seqname := seqname
+ go func() {
+ defer merges.Done()
+ log.Infof("writing %s %s", seqname, label)
+ scanner := bufio.NewScanner(pr)
+ for scanner.Scan() {
+ mtx.Lock()
+ dst.Write(scanner.Bytes())
+ dst.Write([]byte{'\n'})
+ mtx.Unlock()
+ }
+ log.Infof("writing %s %s done", seqname, label)
+ }()