extract lines with a given list of identifiers

Hi All,

My question is if the simple but powerful shell scripts can extract data from a big data file by using a list of identifier. I used to put everything in the database and do joining, which sounds stupid but only way I knew. For example, my data file looks like,

GENE13810X GENE7798X 0.982666016
GENE4333X GENE487X 0.981506348
GENE7806X GENE3731X 0.981079102
GENE13020X GENE4755X 0.980102539
GENE7521X GENE3733X 0.979614258
GENE6499X GENE233X 0.979370117
GENE12708X GENE8435X 0.979064941
GENE4114X GENE4113X 0.978820801
GENE10919X GENE10568X 0.978820801
GENE5651X GENE1342X 0.978210449
GENE7657X GENE6004X 0.977905273
NODE9X GENE3712X 0.977783203
GENE12950X NODE22X 0.977783203
NODE19X GENE34X 0.977783203
GENE7642X GENE3768X 0.977539063
GENE10831X GENE8296X 0.977294922
GENE7952X NODE10X 0.977111816
GENE3807X GENE3806X 0.976501465
GENE12393X NODE23X 0.976501465
GENE2694X NODE29X 0.976501465
NODE30X GENE11332X 0.976501465
GENE3703X GENE3702X 0.976257324
GENE9709X GENE5625X 0.976013184
GENE3526X GENE2743X 0.975769043
GENE12776X NODE3X 0.975708008
GENE11770X NODE35X 0.975708008
GENE4542X NODE24X 0.975463867
GENE5074X GENE1267X 0.975280762
GENE14374X GENE8560X 0.975219727
GENE5872X NODE36X 0.974914551
GENE8550X NODE38X 0.974914551

The given list based on first column can be,
GENE12708X
GENE4114X
GENE10919X
GENE5651X
GENE7657X
NODE9X
GENE12950X
NODE19X
GENE7642X
GENE10831X
GENE7952X

Thanks

# cat > grepfile
GENE12708X
GENE4114X
GENE10919X
GENE5651X
GENE7657X
NODE9X
GENE12950X
NODE19X
GENE7642X
GENE10831X
GENE7952X
^D
# sed 's/^/\^/' grepfile > grepfile.out && mv grepfile.out grepfile
# grep -f grepfile input
GENE12708X GENE8435X 0.979064941
GENE4114X GENE4113X 0.978820801
GENE10919X GENE10568X 0.978820801
GENE5651X GENE1342X 0.978210449
GENE7657X GENE6004X 0.977905273
NODE9X GENE3712X 0.977783203
GENE12950X NODE22X 0.977783203
NODE19X GENE34X 0.977783203
GENE7642X GENE3768X 0.977539063
GENE10831X GENE8296X 0.977294922
GENE7952X NODE10X 0.977111816

Cheers
ZB

Hi

Your code works perfect, but still a problem left. It cannot distingush GENE4, GENE411, GENE4114X. If I ask for GENE4, then it will return all GENE4, GENE411, GENE4114X.

Thanks

Assuming your input file is has space-delimited fields, change the sed in the above example to:

sed 's/^\(.*\)$/\^\1 /' grepfile > grepfile.out && mv grepfile.out grepfile

Cheers
ZB