2017-06-13 14 views
0

私は表のデータを含む2つの変数を持っています。 var1では、1つのフィールドが壊れています。だから私はそれをマッピングしている別の変数とマッピングすることでそれを修正する必要があります。2つの変数の列を比較し、awkまたはjoinを使用して置換を行います

ここでvar1 2番目の列が壊れています。 var2には破損から回復するためのマッピングが存在します。

今私はvar2からvar1のcolumn2の正しい値をチェックし、結果に置き換える必要があります。 VAR1の

内容:

NODE 080e4441a6 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 18628c2a24 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 35c0ae9c35 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 5c9dc20a1a 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 7881cdedf6 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 79587f053e 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 859384e0cd 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 8d996c83fe 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE 9a0fbe4290 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE XXX-19  1 BLA ENABLED BLA1 BLA2 WORKING 
NODE YYY-20  2 BLA ENABLED BLA1 BLA2 WORKING 
NODE bb2839f328 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE e0e440c477 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE ef21a2de3e 1 BLA ENABLED BLA1 BLA2 WORKING 

VAR2の内容:

18628c2a24 AREA-26 
e0e440c477 AREA-21 
YYY-20 YYY-20 
XXX-19 XXX-19 
8d996c83fe AREA-24 
bb2839f328 AREA-22 
9a0fbe4290 AREA-23 
35c0ae9c35 AREA-25 
ef21a2de3e AREA-27 
7881cdedf6 AREA-32 
080e4441a6 AREA-28 
79587f053e AREA-30 
5c9dc20a1a AREA-31 
859384e0cd AREA-29 

望ましい結果:

NODE AREA-28 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-26 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-25 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-31 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-32 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-30 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-29 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-24 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-23 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE XXX-19 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE YYY-20 2 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-22 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-21 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-27 1 BLA ENABLED BLA1 BLA2 WORKING 

は、私のようなものを試してみました。しかし、誰の助け。

awk 'NR==FNR{a[$1]=$2;next} ($2 in a){ gsub($2,$1)}1' <(echo "$var1") <(echo "$var2") 
+0

の1stフィールド上に彼らは変数であるのはなぜ? – 123

+0

2つの異なるコマンドが出力されます。 – monk

答えて

2

あなたは非常に近かった、

awk 'NR==FNR{a[$1]=$2;next}$2 in a{$2=a[$2]}1' <(echo "$var2") <(echo "$var1") 

注変数が渡される順序を試してみてください。

1

はソートコマンドが近づい + に参加:

join -1 2 -2 1 -o1.1,2.2,1.3,1.4,1.5,1.6,1.7,1.8 <(sort -k2 <<< "$var1") <(sort -k1 <<< "$var2") 

出力:

NODE AREA-28 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-26 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-25 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-31 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-32 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-30 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-29 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-24 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-23 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-22 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-21 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE AREA-27 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE XXX-19 1 BLA ENABLED BLA1 BLA2 WORKING 
NODE YYY-20 2 BLA ENABLED BLA1 BLA2 WORKING 

詳細

  • sort -k2 <<< "$var1" - 第一フィールド

  • -1 2でソート$var2内容 - - 2ndフィールド

  • sort -k1 <<< "$var2"でソート$var1内容の2ndフィールドに参加FILE1var1

  • -2 1 - jo FILE2var2

関連する問題