How to print the "grep" result as specified keyword order?


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How to print the "grep" result as specified keyword order?
# 1  
Old 08-08-2019
How to print the "grep" result as specified keyword order?

I have a content.xls file as given below,
Code:
NC_020815.1	1891831	1894692	virb4_A0A0H2X8Z4_	1	954	1945
NC_020815.1	1883937	1886123	vird4_A0A0P9KA26_	1	729	1379
NC_020815.1	2976151	2974985	virb10_H8FLU5_Ba	1	393	478
NC_020815.1	2968797	2967745	virb6_A0A0Q5GCZ4	5	398	499
NC_020815.1	2974985	2973930	virb11_A0A220WG23	1	352	667
NC_020815.1	2977958	2976915	virb8_A0A220WG48	1	333	462
NC_020815.1	2976915	2976151	virb7_A0A2H1SLS0	1	255	464
NC_020815.1	2976915	2976151	virb9_A0A2H1SLS0	1	255	464
NC_020815.1	2969422	2968895	virb5_V7ZBE7		177	206	465

I have the following key words file as id.txt ,
Code:
virb4 
vird4 
virb10 
virb9 
virb8 
virb11 
virb6
virb7

I need to print the key word containing entire row as the order mentioned in id.txt file (keyword file). The expected outcome as follows,
Code:
NC_020815.1	1891831	1894692	virb4_A0A0H2X8Z4_	1	954	1945
NC_020815.1	1883937	1886123	vird4_A0A0P9KA26_	1	729	1379
NC_020815.1	2976151	2974985	virb10_H8FLU5_Ba	1	393	478
NC_020815.1	2976915	2976151	virb9_A0A2H1SLS0	1	255	464
NC_020815.1	2977958	2976915	virb8_A0A220WG48	1	333	462
NC_020815.1	2974985	2973930	virb11_A0A220WG23	1	352	667
NC_020815.1	2968797	2967745	virb6_A0A0Q5GCZ4	5	398	499
NC_020815.1	2976915	2976151	virb7_A0A2H1SLS0	1	255	464

I have tried the following command to do the same,
Code:
grep 'virb4\|vird4\|virb10\|virb9\|virb8\|virb11\|virb6\|virb7' content.xls > print.xls

It print the keywords containing entire row as the order of content.xls, not the order mentioned in the keyword. Moreover, I need to specify the keywords in a separate file as id.txt not like the code tried by me.
Therefore, please help me to do the same.

Last edited by dineshkumarsrk; 08-08-2019 at 09:31 AM..
# 2  
Old 08-08-2019
For reading the keywords from file, try grep -f id.txt


For keeping the sequence as given in id.txt, you could write e.g. an awk or perl script. Or try this very inefficient shell (untested):
Code:
while read ID
  do   grep $ID content.xls
  done < id.txt

Don't try with large files, as it scans through the entire content.xls for every single keyword in id.txt
Reading the content.xls file into an associated array indexed by the key value and then printing it according to the keys found in id.txt is left as an exercise for the reader.
This User Gave Thanks to RudiC For This Post:
# 3  
Old 08-10-2019
Code:
$ awk ' FNR == NR { ky=$4; sub("_.*","",ky); arr[ky]=$0; next } {print arr[$1]} ' content.xls id.txt
NC_020815.1     1891831 1894692 virb4_A0A0H2X8Z4_       1       954     1945
NC_020815.1     1883937 1886123 vird4_A0A0P9KA26_       1       729     1379
NC_020815.1     2976151 2974985 virb10_H8FLU5_Ba        1       393     478
NC_020815.1     2976915 2976151 virb9_A0A2H1SLS0        1       255     464
NC_020815.1     2977958 2976915 virb8_A0A220WG48        1       333     462
NC_020815.1     2974985 2973930 virb11_A0A220WG23       1       352     667
NC_020815.1     2968797 2967745 virb6_A0A0Q5GCZ4        5       398     499
NC_020815.1     2976915 2976151 virb7_A0A2H1SLS0        1       255     464

This User Gave Thanks to anbu23 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. Shell Programming and Scripting

sort, columns, no result! can I print files of "planes"?

hi, please can I ask you for some help? I have data from 3D situation, x y z value I'd like to use gnuplot to generate maps of the value in the planes z=0 to z=1 for example, my file looks like -0,012 0,0060 0,0 0,13972813076023477 -0,012 0,0064319163 4,2894483E-4 ... (1 Reply)
Discussion started by: kocour
1 Replies

3. Shell Programming and Scripting

ps -ef | grep "string1" "string2" " "string3"

Hi all, can any one suggest me the script to grep multiple strings from ps -ef pls correct the below script . its not working/ i want to print OK if all the below process are running in my solaris system. else i want to print NOT OK. bash-3.00$ ps -ef | grep blu lscpusr 48 42 ... (11 Replies)
Discussion started by: steve2216
11 Replies

4. Solaris

How to check "faulty" or "stalled" print queues - SAP systems?

Hi all, First off, sorry for a long post but I think I have no other option if I need to explain properly what I need help for. I need some advise on how best to check for "faulty" or "stalled/jammed' print queues. At the moment, I have three (3) application servers which also acts as print... (0 Replies)
Discussion started by: newbie_01
0 Replies

5. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

6. UNIX for Dummies Questions & Answers

Execute "find . -exec grep" in desending Order

Hi Xperts, I've one query for you. Please help me solving this. Below command is taking long time to fetch names of the files which contain string "475193976" because folder contains millions of files. I agree that this is what this function suppose to do. Correct.. But can it be possible... (6 Replies)
Discussion started by: gav_dhiman
6 Replies

7. Shell Programming and Scripting

MEM=`ps v $PPID| grep -i db2 | grep -v grep| awk '{ if ( $7 ~ " " ) { print 0 } else

Hi Guys, I need to set the value of $7 to zero in case $7 is NULL. I've tried the below command but doesn't work. Any ideas. thanks guys. MEM=`ps v $PPID| grep -i db2 | grep -v grep| awk '{ if ( $7 ~ " " ) { print 0 } else { print $7}}' ` Harby. (4 Replies)
Discussion started by: hariza
4 Replies

8. Shell Programming and Scripting

ls -laR | grep "^-" | awk '{print $9}'| grep "$.txt"

Hi, I don't know hot to make this command work: ls -laR | grep "^-" | awk '{print $9}'| grep "$.txt" It should return the list of file .txt It's important to search .txt at the end of the line, becouse some file name have "txt" in their name but have other extensions (13 Replies)
Discussion started by: DNAx86
13 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

10. UNIX for Dummies Questions & Answers

grep/cat/more -- search in a txt file and display content from a specific "keyword"

Hi, I have a .txt file Sample: ===================== NEXT HOST ===================== AEADBAS001 ip access-list extended BLA_Incoming_Filter ip access-list extended BLA_Outgoing_Filter access-list 1 permit xxxxxxxxxxxxxx access-list 2 permit xxxxxxxxxxxxxx =====================... (4 Replies)
Discussion started by: I-1
4 Replies
Login or Register to Ask a Question

Featured Tech Videos