KHAN irfan
KHAN irfan

Reputation: 263

Output matching lines in linux

I want to match the numbers in the first file with the 2nd column of second file and get the matching lines in a separate output file. Kindly let me know what is wrong with the code?

I have a list of numbers in a file IDS.txt

10028615
1003
10096344
10100
10107393
10113978
10163178
118747520

I have a second File called src1src22.txt

From src:'1'    To src:'22'
CHEMBL3549542   118747520
CHEMBL548732    44526300
CHEMBL1189709   11740251
CHEMBL405440    44297517
CHEMBL310280    10335685

expected newoutput.txt

CHEMBL3549542   118747520

I have written this code

while read line; do cat src1src22.txt | grep -i -w "$line"  >> newoutput.txt done<IDS.txt

Upvotes: 0

Views: 199

Answers (3)

KHAN irfan
KHAN irfan

Reputation: 263

I have found an efficient way to perform the task. Instead of a loop try this -f gives the pattern in the file next to it and searches in the next file. The chance of invalid character length which can occur with grep is reduced and looping slows the process down.

 grep -iw -f IDS.txt src1src22.tx >>newoutput.txt

Upvotes: 1

fzd
fzd

Reputation: 845

Your command line works - except you're missing a semicolon:

while read line; do grep -i -w "$line" src1src22.txt; done < IDS.txt >> newoutput.txt

Upvotes: 1

VIPIN KUMAR
VIPIN KUMAR

Reputation: 3137

Try this -

awk 'NR==FNR{a[$2]=$1;next} $1 in a{print a[$1],$0}' f2 f1
CHEMBL3549542 118747520

Where f2 is src1src22.txt

Upvotes: 0

Related Questions