如果前两个列在两个变量中相同,则需要替换第三列的值。
我尝试过:使用NR===FNR
存储第一列的第一列和第二列。然后,如果第一列和第二列相同,则将变量" B"的第三列用变量" S"的第三列替换。但是,执行$3=$3
没有任何意义。
awk 'NR==FNR{a[$1FS$2]=$1FS$2;next} $1FS$2 in a {$3=$3}1' <(echo "$s") <(echo "$b")
NODE AREA-29 1 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-21 1 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-20 1 UP ENABLED PINGABLE ASIA ACTIVE
echo "$b"
NODE AREA-29 1 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-21 1 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-20 1 UP ENABLED PINGABLE ASIA ACTIVE
echo "$s"
NODE AREA-21 2
NODE AREA-29 10
NODE AREA-20 1
所需结果:
NODE AREA-29 10 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-21 2 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-20 1 UP ENABLED PINGABLE ASIA ACTIVE
正确的方式:
awk -v OFS='t' 'NR==FNR{ a[$1,$2]=$3; next }(($1,$2) in a){ $3=a[$1,$2] }1' <(echo "$s") <(echo "$b")
输出:
NODE AREA-29 10 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-21 2 UP ENABLED PINGABLE ASIA ACTIVE
NODE AREA-20 1 UP ENABLED PINGABLE ASIA ACTIVE
标准尴尬通过分开下标模拟多维阵列 逗号的值。这些值被串联成一个字符串, 由 subsep
的值隔开
这是我的解决方案:
awk 'NR==FNR{a[$1FS$2]=$3;next}$1FS$2 in a { $3 = a[$1FS$2] }1' <(echo "$s") <(echo "$b")
这只需花费$ 3作为存储在数组a中的值。然后,如果发现一场比赛,则会进行3美元的替代。