code: def _merge_list_fastqs(files, out_file, config):
      
      if not all(map(fastq.is_fastq, files)):
          raise ValueError("Not all of the files to merge are fastq files: %s " % (files))
      assert all(map(utils.file_exists, files)), ("Not all of the files to merge "
                                                  "exist: %s" % (files))
      if not file_exists(out_file):
          files = [_gzip_fastq(fn) for fn in files]
          if len(files) == 1:
              if "remove_source" in config and config["remove_source"]:
                  shutil.move(files[0], out_file)
              else:
                  os.symlink(files[0], out_file)
              return out_file
          with file_transaction(out_file) as file_txt_out:
              files_str = " ".join(list(files))
              cmd = "cat {files_str} > {file_txt_out}".format(**locals())
              do.run(cmd, "merge fastq files %s" % files)
      return out_file
docs: merge list of fastq files into one