Bash 比较两个变量中的列,并使用awk或join进行替换

Bash 比较两个变量中的列,并使用awk或join进行替换,bash,join,awk,Bash,Join,Awk,我有两个包含表格数据的变量。现在,var1有一个字段已损坏。所以我需要用另一个变量来映射它来修正它,这个变量保存了它的映射 此处的var12列已损坏。 从损坏中恢复的映射存在于var2中 现在我需要检查var2中var1的column2的正确值,并在结果中替换它 var1的内容: NODE 080e4441a6 1 BLA ENABLED BLA1 BLA2 WORKING NODE 18628c2a24 1 BLA ENABLED BLA1 BLA2 WORKING NODE 35c0ae9c

我有两个包含表格数据的变量。现在,var1有一个字段已损坏。所以我需要用另一个变量来映射它来修正它,这个变量保存了它的映射

此处的
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")

awk'NR==FNR{a[$1]=$2;next}($2 in a){gsub($2,$1)}1'你非常接近,试试看

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

awk'NR==FNR{a[$1]=$2;下一个{$2=a[$2]}1中的}$2'你非常接近,试试看

 awk 'NR==FNR{a[$1]=$2;next}$2 in a{$2=a[$2]}1' <(echo "$var2") <(echo "$var1")
awk'NR==FNR{a[$1]=$2;next}$2在{$2=a[$2]}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")

详情:

  • sort-k2join+sort命令方法:

    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")
    

    详情:


    • sort-k2为什么它们在变量中?它们是两个不同命令的输出。为什么它们在变量中?它们是两个不同命令的输出。