2016-12-28 23 views
1

1つのフィールドが一致する場合、あるファイルの値の一部を別のファイルの値に置き換える必要があります。複雑なawkファイルを別のファイルに置き換える

ファイル交換する:正しい値が含まれてい

NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AL',300,200,12,1,24,1,19,110,220,1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AG',300,200,12,1,24,1,19,110,220,1 

ファイル:

'AL',220,110 
'DZ',379,189.5 
'AO',931,465.5 
'AG',659,329.5 

だから、 'AL' 試合のためFILE1に、私はCOLUMN3とFILE2とcolumn9からCOLUMN2でcolumn8を置き換える必要がありますfile2からどのようにawkやこれに似たものでこれを達成するが、perlではなく、ありがとう。 :)

と擬似コードのいくつかの並べ替えの状況:

if (file2[col1] == file1[col7]) 
    file1[col8] = file2[col2] 
    file1[col9] = file2[col3] 

答えて

3

awk以下はあなた

awk -F"," 'BEGIN{OFS=",";} FNR==NR{col2[$1]=$2; col3[$1]=$3;next} ($7 in col2){$8=col2[$7]; $9=col3[$7];print}' file2 file1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AL',220,110,12,1,24,1,19,110,220,1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AG',659,329.5,12,1,24,1,19,110,220,1 

のためのアイデアが最初file2からハッシュ配列を作成することでうまく動作するはずです列1あたりの実際の列2と列3の値は、配列col2col3で維持します。次に、の条件でfile1を構文解析すると、いずれかの配列に属する$7の行がfile1にあり、その場合は値を代入します。

+0

本質的に同じ答えです。 ++ –

+1

@JamesBrown:私は一度言っています.. :) – Inian

+1

ありがとう、それは魅力のように動作します! @Inian – user3309234

関連する問題