2017-06-13 64 views
0

我有兩個包含表格數據的變量。現在,var1有一個字段已損壞。所以我需要通過映射它與保存它的映射的另一個變量來糾正它。比較兩個變量的列,並使用awk或join進行替換

這裏在var1第二列已損壞。 映射到從腐敗中恢復是存在於var2

現在我需要從var2中檢查var1的第2列的正確值並將其替換爲結果。

VAR1的內容:VAR2的

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 

內容:

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

第一場爲何在變量? – 123

+0

它們是兩個不同命令的輸出。 – 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" - 排序$var1內容由第二場

  • sort -k1 <<< "$var2" - 排序$var2內容由第一場

  • -1 2 - 參加2007年第2場文件1var1

  • -2 1 - jo在對文件2var2