Vlookup using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Vlookup using awk
# 1  
Old 04-13-2016
Vlookup using awk

Hi folks,

Code:
awk 'NR==FNR {m[$1]=$0; next} $1 in m{$0=m[$1]} {print}' file2 file1

Works a charm for a vlookup type query, sourced from Vlookup using awk

However my column content has white spaces and numbers. Example

file1

Code:
The Man on the moon 1
The Man on Jupiter 2
The Man on Mars 3
The Man on Earth 4

file2

Code:
The Man on the moon 1        https://www.example1.com/
The Man on Jupiter 2        https://www.example2.com/
The Man on Mars 3       https://www.example3.com/

Code:
awk 'NR==FNR {m[$1]=$0; next} $1 in m{$0=m[$1]} {print}' file2 file1

returns

Code:
The Man on Mars 3        https://www.example3.com/
The Man on Mars 3        https://www.example3.com/
The Man on Mars 3       https://www.example3.com/
The Man on Mars 3        https://www.example3.com/
<empty line>

Files are \t delimited. How can I get awk to give me my desired output

Code:
The Man on the moon 1        https://www.example1.com/
The Man on Jupiter 2        https://www.example2.com/
The Man on Mars 3       https://www.example3.com/
The Man on Earth 4       Not Available

Any help would be greatly appreciated.

Last edited by pshields1984; 04-13-2016 at 12:24 PM..
# 2  
Old 04-13-2016
If you input file: file2 is indeed tab separated, then you can try:-
Code:
awk -F'\t' '
        NR == FNR {
                m[$1] = $0
                next
        }
        {
                if ( $1 in m )
                        $0 = m[$1]
                else
                        $0 = $1 OFS "Not Available"
                print
        }
' OFS='\t' file2 file1

This User Gave Thanks to Yoda For This Post:
# 3  
Old 04-13-2016
Hello pshields1984,

Could you please try following and let me know if this helps you.
Code:
awk 'FNR==NR{Q=$NF;$NF="";gsub(/[[:space:]]+$/,X,$0);A[$0]=Q;next} {Q=($0 in A)?$0 OFS A[$0]:$0 OFS "NA";print Q;Q=""}' file2 file1

Thanks,
R. Singh
# 4  
Old 04-13-2016
That works perfectly Yoda, many thanks. How can I turn your example into a one-liner? Is that possible? I've tried
PHP Code:
awk -F'\t' 'NR == FNR {m[$1] = $0; next} {if ( $1 in m )$0 = m[$1] else $0 = $1 OFS "Not Available"}' OFS='\t' file2 file1 
but I'm getting
Code:
awk: cmd. line:1: NR == FNR {m[$1] = $0; next} {if ( $1 in m )$0 = m[$1] else $0 = $1 OFS "Not Available"}
awk: cmd. line:1:                                                        ^ syntax error

many thanks

---------- Post updated at 10:44 AM ---------- Previous update was at 10:42 AM ----------

Quote:
Originally Posted by RavinderSingh13
Hello pshields1984,

Could you please try following and let me know if this helps you.
Code:
awk 'FNR==NR{Q=$NF;$NF="";gsub(/[[:space:]]+$/,X,$0);A[$0]=Q;next} {Q=($0 in A)?$0 OFS A[$0]:$0 OFS "NA";print Q;Q=""}' file2 file1

Thanks,
R. Singh
This worked brilliantly thank you.
# 5  
Old 04-13-2016
Try also
Code:
awk -F"\t" '
NR == FNR       {m[$1] = $NF
                 next
                }
!($1 in m)      {m[$1] = "Not Available"
                }
                {$(NF+1) =  m[$1]
                }
1
' OFS='\t' file2 file1

# 6  
Old 04-13-2016
Quote:
Originally Posted by pshields1984
How can I turn your example into a one-liner? Is that possible?
You missed few semicolons:-
Code:
awk -F'\t' 'NR==FNR{m[$1]=$0;next}{if($1 in m) $0=m[$1];else $0=$1 OFS "Not Available";print}' OFS='\t' file2 file1

# 7  
Old 04-16-2016
Thanks Yoda, it works perfectly for me.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Vlookup not using awk

Hi I just want again to ask for help on what command to use to vlookup f1 group name in "/etc/group" matching f3 of it to "/etc/passwd" f4. I do need to display group name in the output of /etc/passwd without using awk or NR==FNR command. thank you while IFS=: read -r f1 f2 f3 f4 f5 f6 f7... (4 Replies)
Discussion started by: joonisio
4 Replies

2. UNIX for Beginners Questions & Answers

Vlookup on 2 files - inserting vlookup command on another command

Hello, i am trying to print group name column(etc/group) on script (etc/passwd) since group name is not listed on etc/passwd columns. Im trying to do a vlookup. but i cant figure out how i can insert the vlookup command FNR==NR inside the print out command or the output. I also tried exporting... (2 Replies)
Discussion started by: joonisio
2 Replies

3. Shell Programming and Scripting

Vlookup multiple file and awk

Hello Folks, What I wish to do is: If first column matches in main and new file, then paste $COL2 into output file. Something like vlookup. Please see also bold text in expected output. mainfile 11 22 33 44 55 66 77 88 99 100 101 102 (4 Replies)
Discussion started by: baris35
4 Replies

4. Shell Programming and Scripting

Vlookup using awk non similar files

I need to vlookup and check the server not found. Source file 1 server1 server2 server3 server4 server5_root server6_silver server7 server7-test server7-temp Source file 2 server1_bronze (6 Replies)
Discussion started by: ranjancom2000
6 Replies

5. Shell Programming and Scripting

Vlookup using awk without exact match

Code used to find the server from cloum 3 and update needtotakesnap Output came from above command awk 'NR==FNR{A;next}$3 in A{$3 = "needtotakesnap " $3}1' /home/Others/active-server.txt /home/Others/all-server |grep server1 879 dummy server1_217_silver dummy 00870 TDEV 2071575 831 Tier1... (3 Replies)
Discussion started by: ranjancom2000
3 Replies

6. Shell Programming and Scripting

Vlookup using awk without exact match for two colum input

Source file 1 335 R1-snapfound 0098F RDFType:R1 R2-Dev R2-snapfound ,010C0 RemoteSymmetrixID:345 335 R1-snapfound 00990 RDFType:R1 R2-Dev R2-snapfound ,010C1 RemoteSymmetrixID:345 335 R1-snapfound 009C0 RDFType:R1 R2-Dev R2-snapfound ,009C1 RemoteSymmetrixID:345 335 R1-snapfound 009C1... (5 Replies)
Discussion started by: ranjancom2000
5 Replies

7. Shell Programming and Scripting

Excel vlookup function like value mapping with awk

I have two files File1 175552 st_497858.1 rs86052.1 rs92185.1 st_001022416.1 174841 175552_174841 179912 st_001122967.2 rs90435.1 rs89122.1 st_001022583.1 175545 179912_175545 179912 st_001122967.2 rs90435.1 rs89122.1 st_001022584.1 175545 179912_175545 179967 st_001256606.1 rs93516.2... (1 Reply)
Discussion started by: sammy777888
1 Replies

8. Shell Programming and Scripting

awk cmd for vlookup in Mysql

Hi, Is there possible to do vlookup in Mysql one table from another table based on one column values and placed the data in same table? if it is possible in mysql itself pls share links for reference. Here is the ex: i need to vlookup the cus.id in table to and place the cus.name in 4th... (3 Replies)
Discussion started by: Shenbaga.d
3 Replies

9. Shell Programming and Scripting

awk script to perform an action similar to vlookup between two csv files in UNIX

Hi, I am new to awk/unix and am trying to put together an awk script to perform an action similar to vlookup between the two csv files. Here are the contents of the two files: File 1: Date,ParentID,Number,Area,Volume,Dimensions 2014-01-01,ABC,247,83430.33,857.84,8110.76... (9 Replies)
Discussion started by: Prit Siv
9 Replies

10. Shell Programming and Scripting

Vlookup using awk

Hello, I am trying to use vlookup (Excel function) using awk but there is some problem :( --file1-- ABC123 101F X1 A $P=Z X2 A $P=X X3 B $P=F X4 C $P=G MNK180 END --file2-- X1 A_t $P=Z X2 A_t $P=X X3 B_u $P=F X4 C_o $P=G (2 Replies)
Discussion started by: young
2 Replies
Login or Register to Ask a Question