code: def pairinplace(args):
      
      from jcvi.utils.iter import pairwise
  
      p = OptionParser(pairinplace.__doc__)
      p.set_rclip()
      p.set_tag()
      p.add_option("--base",
                  help="Base name for the output files [default: %default]")
      opts, args = p.parse_args(args)
  
      if len(args) != 1:
          sys.exit(not p.print_help())
  
      fastqfile, = args
      base = opts.base or op.basename(fastqfile).split(".")[0]
  
      frags = base + ".frags.fastq"
      pairs = base + ".pairs.fastq"
      if fastqfile.endswith(".gz"):
          frags += ".gz"
          pairs += ".gz"
  
      fragsfw = must_open(frags, "w")
      pairsfw = must_open(pairs, "w")
  
      N = opts.rclip
      tag = opts.tag
      strip_name = (lambda x: x[:-N]) if N else None
  
      fh_iter = iter_fastq(fastqfile, key=strip_name)
      skipflag = False  # controls the iterator skip
      for a, b in pairwise(fh_iter):
          if b is None:  # hit the eof
              break
  
          if skipflag:
              skipflag = False
              continue
  
          if a.name == b.name:
              if tag:
                  a.name += "/1"
                  b.name += "/2"
              print(a, file=pairsfw)
              print(b, file=pairsfw)
              skipflag = True
          else:
              print(a, file=fragsfw)
  
      # don't forget the last one, when b is None
      if not skipflag:
          print(a, file=fragsfw)
  
      logging.debug("Reads paired into `%s` and `%s`" % (pairs, frags))
      return pairs
docs: %prog pairinplace bulk.fastq
  
      Pair up the records in bulk.fastq by comparing the names for adjancent
      records. If they match, print to bulk.pairs.fastq, else print to
      bulk.frags.fastq.