awk - replacing stings in file1 with column1 in file2


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk - replacing stings in file1 with column1 in file2
# 1  
Old 11-09-2009
awk - replacing stings in file1 with column1 in file2

Hello,

I've never used awk before, but from what I've read, it will best suit what I'm trying to do. I have 2 files. I need to replace strings in file1 with the first column of a matching string in file2. Below are examples:

File1:
random-string1
1112
1232
3213
2131
random-string2
1231
1112
3213

File2:
DD 3213
CCA 1231
AABC 1112
ADFDFF 1232
DDFSCC 2131


Output File3:
random-string1
AABC
ADFDFF
DD
DDFSCC
random-string2
CCA
AABC
DD

I tried something like:
grep `cat file1` file2 | awk {'print $1'} > file3

I lose the random-strings with my output. I'm sure there's an easier way to do it with awk alone and drop the grep.

Thanks
# 2  
Old 11-09-2009
try this
Code:
awk 'FILENAME=="file2"{A[$2]=$1}
FILENAME=="file1"{if(A[$1]){print A[$1]}else{print $0}}' file2 file1

# 3  
Old 11-09-2009
Thank you for the quick reply. I apologize if this is a novice question, but so I'm clear, I would run it like this?

file1=master.txt
file2=ref.txt

awk 'FILENAME=="ref.txt"{A[$2]=$1}
FILENAME=="master.txt"{if(A[$1]){print A[$1]}else{print $0}}' ref.txt master.txt

When I try that, I have no output - I'm sure I'm not using it correctly.

Thanks
# 4  
Old 11-09-2009
you are doing it correctly..
you are not getting any errors right??
and are you sure that file contents are same as you given in your question.. i mean no special character and all.
# 5  
Old 11-09-2009
I see where I went wrong.. my examples were not accurate. My apologies.

in file2 (ref.txt) the values look more like this:

File2:
DD 3213
CCA 1231
AA BC 1112
ADFDFF 1232
DDF SCC 2131

I ran this:

awk 'FILENAME=="ref.txt"{A[$2]=$1}
FILENAME=="master.txt"{if(A[$1]){print A[$1]}else{print $0}}' ref.txt master.txt > output.txt

Any string in file 2 that had spaces (AA BC, DDF SCC) did not work for obvious reasons. I've regenerated file 2 to look like this now with sed:

DD:3213
CCA:1231
AA BC:1112
ADFDFF:1232
DDF SCC:2131

Is there any way I can use the awk script you gave me to recognize the columns separated by the colon? I can change the colon to any other value as well if there is something that will work better with awk.

Thanks for the help and patience.

---------- Post updated at 01:39 AM ---------- Previous update was at 01:18 AM ----------

I tried this but no lucK:

awk 'FILENAME=="ref.txt"{FS = : ; A[$2]=$1}
FILENAME=="master.txt"{if(A[$1]){print A[$1]}else{print $0}}' ref.txt master.txt > results.txt

awk: FILENAME=="ref.txt"{FS = : ; A[$2]=$1}
awk: ^ syntax error

---------- Post updated at 01:53 AM ---------- Previous update was at 01:39 AM ----------

Thank you for the help vidyadhar85.

I was able to get it to work with this:

Code:
awk '
BEGIN{FS=":"}
FILENAME=="ref.txt"{A[$2]=$1}
FILENAME=="master.txt"{if(A[$1]){print A[$1]}else{print $0}}' ref.txt master.txt > results.txt

# 6  
Old 11-09-2009
even this will do..
Code:
awk 'FILENAME=="file2"{FS=":";A[$2]=$1}
FILENAME=="file1"{if(A[$1]){print A[$1]}else{print $0}}' file2 file1

# 7  
Old 11-09-2009
I'm not sure if I should create a new thread or not - I'm seeing now that before I run the awk script, I need to adjust File1.

Again:
File1:
random-string1
1112
1232
3213
2131
random-string2
1231
1112
3213

I need to insert some text in front of each of the random-strings. The random strings always begin with letters. Looking for output:

File1:
PAGE-random-string1
1112
1232
3213
2131
PAGE-random-string2
1231
1112
3213

Thanks
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 field in file2 if not the same as file1

Trying to use awk to: update $2 in file2 with the $2 value in file1, if $1 in file1 matches $13 in file2, which is tab-delimeted. The $2values may already be the same so in that case nothing happens and the next line is processed. There are exactly 4,605 unique $13 values. Thank you :). ... (4 Replies)
Discussion started by: cmccabe
4 Replies

2. Shell Programming and Scripting

awk to search field2 in file2 using range of fields file1 and using match to another field in file1

I am trying to use awk to find all the $2 values in file2 which is ~30MB and tab-delimited, that are between $2 and $3 in file1 which is ~2GB and tab-delimited. I have just found out that I need to use $1 and $2 and $3 from file1 and $1 and $2of file2 must match $1 of file1 and be in the range... (6 Replies)
Discussion started by: cmccabe
6 Replies

3. Shell Programming and Scripting

Replacing first field of file2 with the second filed of file1 for matching cases

Dear All, Need your help..:D I am not regular on shell scripts..:( I have 2 files.. Content of file1 cellRef 4};"4038_2_MTNL_KALAMBOLI" cellRef 1020};"4112_3_RAINBOW_BLDG" cellRef 134};"4049_2_TATA_HOSPITAL" cellRef 1003};"4242_3_HITESH_CONSTRUCTION" cellRef... (6 Replies)
Discussion started by: ailnilanjan
6 Replies

4. Shell Programming and Scripting

Looking for lines, which is present in file1 but not in file2 using UNIX and awk

I have 2 files with 7 fields and i want to print the lines which is present in file1 but not in file2 based on field1 and field2. Logic: I want to print all the lines, where there is a particular column1 and column2. And we do not find the set of column1 and column2 in file2. Example: "sc2/10... (3 Replies)
Discussion started by: NamS
3 Replies

5. Shell Programming and Scripting

Pattern Matching & replacing of content in file1 with file2

I have file 1 & file 2 with content mentioned below. I want to get the output as shown in file3. Requirement: check the content of column 1 & column 2, if value of column 1 in file1 matches with first column of file2 then remaining columns(2&3) of file2 should get replaced, also if value of... (4 Replies)
Discussion started by: siramitsharma
4 Replies

6. Shell Programming and Scripting

[awk] split file1 and save it as var from file2

I have 2 files: file_1: file_2: expected result: name file: "artV1" "artV2" etc. I have: but why don;t work save to file 'out'?? (3 Replies)
Discussion started by: ffresz
3 Replies

7. UNIX for Dummies Questions & Answers

if matching strings in file1 and file2, add column from file1 to file2

I have very limited coding skills but I'm wondering if someone could help me with this. There are many threads about matching strings in two files, but I have no idea how to add a column from one file to another based on a matching string. I'm looking to match column1 in file1 to the number... (3 Replies)
Discussion started by: pathunkathunk
3 Replies

8. Shell Programming and Scripting

Awk Compare File1 File2 on f2

I'm trying to compare two files using AWK, where if field2 of both files match, replace field1 of file1 with field1 of file2 and if there is no match just print the line of file1. file1.txt (has empty first field) :ABBATOM:B:H:1992 :ABBA TROJAN:B:H:1993 :ABBES FIRST HOPE:B:M:1997 :ABBEYS... (4 Replies)
Discussion started by: RacerX
4 Replies

9. Shell Programming and Scripting

replacing text in file1 with list from file2

I am trying to automate a process of searching through a set of files and replace all occurrences of a formatted text with the next item in the list of a second file. Basically i need to replace all instances of T????CLK???? with an IP address from a list in a second file. the second file is one IP... (9 Replies)
Discussion started by: dovetail
9 Replies

10. Shell Programming and Scripting

Awk Compare f1,f2,f3 of File1 with f1 of File2

I have an Awk string-compare problem and have searched the internet and forums for a solution i could use but cannot find a solution i understand to make work with my particular problem: I need to compare (field1 field2 field3 of File1) against (field1 of File2) and if they match print out... (6 Replies)
Discussion started by: RacerX
6 Replies
Login or Register to Ask a Question