a44421a79fb36cc2036fe116b97ea3bc9590cd0c braney Fri Dec 2 09:34:39 2011 -0800 removed rcsid (#295) diff --git src/utils/bedRestrictToPositions/bedRestrictToPositions.c src/utils/bedRestrictToPositions/bedRestrictToPositions.c index abfc625..964be08 100644 --- src/utils/bedRestrictToPositions/bedRestrictToPositions.c +++ src/utils/bedRestrictToPositions/bedRestrictToPositions.c @@ -1,92 +1,91 @@ /* bedRestrictToPositions - Filter bed file, restricting to only ones that match chrom/start/ends * specified in restrict.bed file. */ #include "common.h" #include "linefile.h" #include "hash.h" #include "options.h" -static char const rcsid[] = "$Id: newProg.c,v 1.30 2010/03/24 21:18:33 hiram Exp $"; void usage() /* Explain usage and exit. */ { errAbort( "bedRestrictToPositions - Filter bed file, restricting to only ones that match chrom/start/ends specified in restrict.bed file.\n" "usage:\n" " bedRestrictToPositions in.bed restrict.bed out.bed\n" "options:\n" " -xxx=XXX\n" ); } static struct optionSpec options[] = { {NULL, 0}, }; #define BED_STRING_SIZE 256 char *bedString(char *chrom, char *start, char *end, char result[BED_STRING_SIZE]) /* Return space delimited concatenation: chrom start end */ { safef(result, BED_STRING_SIZE, "%s\t%s\t%s", chrom, start, end); return result; } struct hash *bedIntoHash(char *fileName) /* Read in a bed file, return hash keyed by bedStrings (with empty vals) * and return this hash. */ { /* Add each bed item to hash, and list, checking uniqueness */ struct hash *hash = hashNew(21); struct lineFile *lf = lineFileOpen(fileName, TRUE); char *row[3]; while (lineFileRow(lf, row)) { char key[BED_STRING_SIZE]; bedString(row[0], row[1], row[2], key); hashAdd(hash, key, NULL); } /* Clean up and go home. */ lineFileClose(&lf); return hash; } void bedRestrictToPositions(char *inFile, char *restrictFile, char *outFile) /* bedRestrictToPositions - Filter bed file, restricting to only ones that match chrom/start/ends * specified in restrict.bed file. */ { struct hash *restrictHash = bedIntoHash(restrictFile); struct lineFile *lf = lineFileOpen(inFile, TRUE); FILE *f = mustOpen(outFile, "w"); char *line; while (lineFileNextReal(lf, &line)) { char *chrom = nextWord(&line); char *start = nextWord(&line); char *end = nextWord(&line); if (end == NULL) errAbort("Expecting at least three words line %d of %s", lf->lineIx, lf->fileName); char key[BED_STRING_SIZE]; bedString(chrom, start, end, key); if (hashLookup(restrictHash, key)) { fprintf(f, "%s\t%s\t%s", chrom, start, end); line = skipLeadingSpaces(line); if (isEmpty(line)) fputc('\n', f); else fprintf(f, "\t%s\n", line); } } carefulClose(&f); } int main(int argc, char *argv[]) /* Process command line. */ { optionInit(&argc, argv, options); if (argc != 4) usage(); bedRestrictToPositions(argv[1], argv[2], argv[3]); return 0; }