I am a beginner and my work starts to become difficult for me. I explain my problem. I have two tables File1 and File2 (reference table).
File1 num, Name 1, 1_1_busteni 13, 23_Doicesti 40, 2_AR_Moreni 47, 2_AR_Moreni_SUD 55, Petrolul_Romanesc 62, castor File2 ID_ref, Name_ref R_001, BUSTENI R_002, DOICESTI-23 R_003, MORENI R_004, MORENI-SUD R_005, ROMANESC R_006, CASTOR File3 num, Name,ID_ref,Name_ref 1, 1_1_busteni, R_001, BUSTENI 13, 23_Doicesti, R_002, DOICESTI-23 40, 2_AR_Moreni, R_003, MORENI 47, 2_AR_Moreni_SUD, R_004, MORENI-SUD 55, Petrolul_Romanesc, R_005, ROMANESC 62, castor, R_006, CASTOR
I don’t have any identical column but I have some similarity between &2File1 and &2File2. File1 is from user and we want to standardize everything so I have a lot of different cases. I don´t know how to start. My idea was to remove all the “_” in my first file and “-“ in my second and compare them. I managed to do it with
awk 'BEGIN {FS=OFS=","} {gsub(/_/,"",$2)}1' file1.txt and awk 'BEGIN {FS=OFS=","} {gsub(/-/,"",$2)}1’ file2.txt
separately but I don’t know how to combine and compare my two files.
I know also I have to think about lowercase.
A nice guy give me this code above: It works for CASTOR
 but How can I associate it with my gsub ???
$ awk '
BEGIN { FS=OFS="," }
NR==FNR {                                                  
    a[tolower($2)]=$0                                      
    next
}
{                                                          
    split($2,b,"[^[:alpha:]]")                             
    print $0 (tolower(b[1]) in a?OFS a[tolower(b[1])]:"")  
}' file2 file1 
Maybe it exists a better way, I am open !!!
Advertisement
Answer
Here is one shot at it in awk:
$ awk 'BEGIN { FS=", *"; OFS="," }
NR==FNR {
    a[tolower($2)]=$0
    next
}
{
    for(i in a)               # for every city in file2
        if(tolower($2)~i) {   # compare it to a record from file1
            print $0,a[i]     # print it if there is a match
            next
        }
}1' file2 file1
num, Name
1, 1_1_busteni,R_001,  BUSTENI
13, 23_Doicesti
40, 2_AR_Moreni,R_003,  MORENI
47, 2_AR_Moreni_SUD,R_003,  MORENI
55, Petrolul_Romanesc,R_005,  ROMANESC
62, castor,R_006,  CASTOR
Any better than that would require rules on processing the underscores and dashes in the names or approximate pattern matching with approriate algorithms (see for example Levenshtein distance).
 
						