Data on Gene Position in Human Genome
I recommend to filter using transcript_type value from description column. You need only proteine_coding genes. Now you have extra ~10K unprocessed pseudogenes, ~5K antisense genes, ~4K miRNA, ~7K lincRNA and more than thirty other categories of unprocessed pseudogenic stuff.

As far as I know current release for GRCh37 is 19th version, not 18.