比较两个变量的列,并使用awk或join

时间:2017-06-13 11:59:32

标签: bash join awk

我有两个包含表格数据的变量。现在,var1有一个字段已损坏。所以我需要通过将其映射到另一个保存其映射的变量来纠正它。

此处var1第二列已损坏。 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")

2 个答案:

答案 0 :(得分:2)

你非常接近,试试

output/host

请注意变量的传递顺序。

答案 1 :(得分: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 - 加入 file1的第二个字段var1

  • -2 1 - 加入 file2的第一个字段var2