如果前两列在两个变量中相同,我需要替换第三列的值。
我尝试过:使用$3=$3
存储第一个变量的第一列和第二列。然后,如果第一列和第二列相同则
用变量“s”的第三列替换变量“b”的第三列。但是,做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
User::chunk(100, function ($users) {
foreach ($users as $user) {
$temp=$user['attributes'];
unset($temp['_id']);
$params = [
'index' => 'test_index',
'type' => $temp['type'],
'id' => $temp['lid'],
'body' => $temp
];
$client = Elasticsearch::create()->build();
$response = $client->index($params);
}
});
答案 0 :(得分: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")
输出:
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通过分隔下标来模拟多维数组 用逗号表示的值。这些值连接成一个字符串, 由 SUBSEP
的值分隔
答案 1 :(得分:0)
这是我的解决方案:
awk 'NR==FNR{a[$1FS$2]=$3;next}$1FS$2 in a { $3 = a[$1FS$2] }1' <(echo "$s") <(echo "$b")
这个只需要3美元作为存储在数组a中的值。然后,如果找到匹配,则发生$ 3的替换。