Awk 如果前两列在两个变量中相同,则替换第三列的值

Awk 如果前两列在两个变量中相同,则替换第三列的值,awk,Awk,如果前两列在两个变量中相同,我需要替换第三列的值 我尝试:使用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

如果前两列在两个变量中相同,我需要替换第三列的值

我尝试:使用
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
正确的方法:

awk -v OFS='\t' 'NR==FNR{ a[$1,$2]=$3; next }(($1,$2) in a){ $3=a[$1,$2] }1' <(echo "$s") <(echo "$b")

标准awk通过分离下标来模拟多维数组 带逗号的值。这些值被连接成一个字符串, 由子集的值分隔

以下是我的解决方案:

awk 'NR==FNR{a[$1FS$2]=$3;next}$1FS$2 in a { $3 = a[$1FS$2] }1' <(echo "$s") <(echo "$b") 
awk'NR==FNR{a[$1FS$2]=$3;下一个{$3=a[$1FS$2]}1中的}$1FS$2'
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 'NR==FNR{a[$1FS$2]=$3;next}$1FS$2 in a { $3 = a[$1FS$2] }1' <(echo "$s") <(echo "$b")