awk to update field in file based of match in another


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk to update field in file based of match in another
# 1  
Old 11-19-2016
awk to update field in file based of match in another

I am trying to use awk to match two files that are tab-delimited. When a match is found between file1 $1 and file2 $4, $4 in file2 is updated using the $2 value in file1. If no match is found then the next line is processed. Thank you Smilie.

file1
Code:
uc001bwr.3    ADC
uc001bws.3    ADC
uc001bwt.1    ADC
uc001bwu.3    ADC
uc001bwv.3    ADC
uc001bwx.1    ADC
uc001bwy.1    ADC
uc001bwz.1    ADC
uc001chv.2    LEPRE1
uc001chw.2    LEPRE1
uc001chx.4    LEPRE1
uc001chy.4    LEPRE1

file2
Code:
chr1    33546703    33546905    uc001bwr.3
chr1    33546978    33547119    uc001bwr.3
chr1    33547191    33547423    uc001bwr.3
chr1    43211995    43212533    uc001chw.2
chr1    43212913    43213093    uc001chw.2

desired output tab-delimeted
Code:
chr1    33546703    33546905    ADC
chr1    33546978    33547119    ADC
chr1    33547191    33547423    ADC
chr1    43211995    43212533    LEPRE1
chr1    43212913    43213093    LEPRE1

awk
Code:
awk -F'\t' -v OFS='\t'  'NR==FNR{a[$1]=4}NR!=FNR{if(a[$4])' file1 file2
awk: cmd. line:1: NR==FNR{a[$1]=4}NR!=FNR{if(a[$4])
awk: cmd. line:1:                                  ^ unexpected newline or end of string

# 2  
Old 11-19-2016
Quote:
awk -F'\t' -v OFS='\t' 'NR==FNR{a[$1]=4}NR!=FNR{if(a[$4]){...}}' file1 file2
That command is missing all the highlighted to not complain, however it will not provide what you are asking.

Code:
awk 'FNR==NR { a[$1]=$2; next } { if(a[$4]){$4=a[$4] }; print }' OFS="\t" file1 file2


Last edited by Aia; 11-20-2016 at 12:13 AM.. Reason: removed extra pair of code tags
This User Gave Thanks to Aia For This Post:
# 3  
Old 11-19-2016
Hello cmccabe,

Could you please try following and let me know if this helps you.
Code:
awk  -F"\t" 'FNR==NR{A[$1]=$2;next} ($NF in A){$NF=A[$NF];print}' OFS="\t"  Input_file1   Input_file2

Output will be as follows.
Code:
chr1    33546703        33546905        ADC
chr1    33546978        33547119        ADC
chr1    33547191        33547423        ADC
chr1    43211995        43212533        LEPRE1
chr1    43212913        43213093        LEPRE1

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 4  
Old 11-20-2016
Quote:
Originally Posted by RavinderSingh13
Hello cmccabe,

Could you please try following and let me know if this helps you.
Code:
awk  -F"\t" 'FNR==NR{A[$1]=$2;next} ($NF in A){$NF=A[$NF];print}' OFS="\t"  Input_file1   Input_file2

Output will be as follows.
Code:
chr1    33546703        33546905        ADC
chr1    33546978        33547119        ADC
chr1    33547191        33547423        ADC
chr1    43211995        43212533        LEPRE1
chr1    43212913        43213093        LEPRE1

Thanks,
R. Singh
Be aware that this will delete any line in Input_file2 that does not have a match in Input_file1.
This User Gave Thanks to Aia For This Post:
# 5  
Old 11-23-2016
Thank you both Smilie.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to update file based on match in 3 fields

Trying to use awk to store the value of $5 in file1 in array x. That array x is then used to search $4 of file1 to find aa match (I use x to skip the header in file1). Since $4 can have multiple strings in it seperated by a , (comma), I split them and iterate througn each split looking for a match.... (2 Replies)
Discussion started by: cmccabe
2 Replies

2. Shell Programming and Scripting

Update a specific field in file with Variable value based on other Key Word

I have an input file with A=xyz B=pqr I would want the value in Second Field (xyz or pqr) updated with a value present in Shell Variable based on the value passed in the first field. (A or B ) while read line do NEW_VALUE = `some functionality done on $line` If $line=First Field-... (1 Reply)
Discussion started by: infernalhell
1 Replies

3. Shell Programming and Scripting

awk to assign points to variables based on conditions and update specific field

I have been reading old posts and trying to come up with a solution for the below: Use a tab-delimited input file to assign point to variables that are used to update a specific field, Rank. I really couldn't find too much in the way of assigning points to variable, but made an attempt at an awk... (4 Replies)
Discussion started by: cmccabe
4 Replies

4. Shell Programming and Scripting

awk to update value based on pattern match in another file

In the awk, thanks you @RavinderSingh13, for the help in below, hopefully it is close as I am trying to update the value in $12 of the tab-delimeted file2 with the matching value in $1 of the space delimeted file1. I have added comments for each line as well. Thank you :). awk awk '$12 ==... (10 Replies)
Discussion started by: cmccabe
10 Replies

5. Shell Programming and Scripting

Perl to update field in file based of match to another file

In the perl below I am trying to set/update the value of $14 (last field) in file2, using the matching NM_ in $12 or $9 in file2 with the NM_ in $2 of file1. The lengths of $9 and $12 can be variable but what is consistent is the start pattern will always be NM_ and the end pattern is always ;... (4 Replies)
Discussion started by: cmccabe
4 Replies

6. Shell Programming and Scripting

awk to update file based on partial match in field1 and exact match in field2

I am trying to create a cronjob that will run on startup that will look at a list.txt file to see if there is a later version of a database using database.txt as the source. The matching lines are written to output. $1 in database.txt will be in list.txt as a partial match. $2 of database.txt... (2 Replies)
Discussion started by: cmccabe
2 Replies

7. Shell Programming and Scripting

awk to update value in field based on another field

In the tab-delimeted input file below I am trying to use awk to update the value in $2 if TYPE=ins in bold, by adding the value of HRUN= in italics. In the below since in line 1 TYPE=ins the 117282541 value in $2 has 6 added because that is the value of HRUN=. Hopefully the awk is a start but I... (2 Replies)
Discussion started by: cmccabe
2 Replies

8. Shell Programming and Scripting

awk match to update contents of file

I am trying to match $1 in file1 with $2 in file2. If a match is found then $3 and $4 of file2 are copied to file1. Both files are tab-delimeted and I am getting a syntax error and would also like to update file1 in-place without creating a new file, but am not sure how. Thank you :). file1 ... (19 Replies)
Discussion started by: cmccabe
19 Replies

9. Shell Programming and Scripting

awk to update field file based on match

If $1 in file1 matches $2 in file2. Then the value in $2 of file2 is updated to $1"."$2 of file2. The awk seems to only match the two files but not update. Thank you :). awk awk 'NR==FNR{A ; next} $1 in A { $2 = a }1' file1 file2 file1 name version NM_000593 5 NM_001257406... (3 Replies)
Discussion started by: cmccabe
3 Replies

10. Shell Programming and Scripting

Update a field in a file based on condition

Hi i am new to scripting. i have a file file.dat with content as : CONTENT_STORAGE PERCENTAGE FLAG: /storage_01 64% 0 /storage_02 17% 1 I need to update the value of FLAG for a particular CONTENT_STORAGE value I have written the following code #!/bin/sh threshold=20... (1 Reply)
Discussion started by: kichu
1 Replies
Login or Register to Ask a Question