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

  • 本文关键字:两个 替换 三列 变量 如果 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 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美元的替代。

最新更新