2017-07-21 3 views
1

私は初心者であり、私の仕事は難しくなり始めます。私は自分の問題を説明します。 私は2つのテーブルFile1とFile2(参照テーブル)を持っています。awkは文字列の比較に基づいて2つの列を持つ2つのファイルを結合しました

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 

私は同じ列を持っていないが、私は& 2File1と& 2File2の間にいくつかの類似性を持っています。 File1はユーザーからのものであり、私はすべてを標準化したいので、多くの異なるケースがあります。 開始方法はわかりません。 私の考えは、私の最初のファイルのすべての "_"と私の2番目の " - "を削除し、それらを比較することでした。 私は別に

awk 'BEGIN {FS=OFS=","} {gsub(/_/,"",$2)}1' file1.txt and awk 'BEGIN {FS=OFS=","} {gsub(/-/,"",$2)}1’ file2.txt 

でそれを行うために管理が、私は組み合わせて、私の2つのファイルを比較する方法がわかりません。

私も小文字について考える必要があります。 素敵な男が私にthis codeを与えます:それはCASTOR
のために働くが、どうすれば私の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 

多分もっと良い方法が存在する、私は開いている!ここ

+0

なぜ '23_Doicesti'は' DOICESTI-23'にマッチするのですか?広すぎる – RomanPerekhrest

+0

最初のコンマ区切り値が47,55または62のどちらから来ているのかわからないのですか? –

+0


」は書式設定を試みたと思いますか? @Ravinderはあなたのコードをブロックに編集したので、各行の最後から削除する必要があります。 –

答えて

0

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 

任意のより良いは、(例えば、参照名またはapproriateアルゴリズムとに一致近似パターンにアンダーとダッシュの処理に関する規則を必要とするであろうがLevenshtein distance )。

関連する問題