用一个文件中的数字替换其他文件中的数字

问题描述 投票:1回答:1

我有个问题。我有两个文件(file1和file2)。两个文件都包含数字(具有不同的值),这些数字表示来自不同估计的相同变量。在file1中,这个number1例如在字段$ 3中以名称var1开头的行中,在file2中,这个number2以名称var2开头并且在字段$ 2中。我想从file1取数字1并用它替换file2中的number2。我尝试了下面的脚本,但它不起作用,在输出中没有比原始文件2更改:

#! /bin/bash

    Var1=$(cat file1 | grep 'var1' | awk '{printf "%s", $3}' )

    Var2=$(cat file2 | grep 'var2' | awk '{printf "%s", $2}' )

    cat file2 | awk '{gsub(/'$Var2'/,'$Var1'); print}'

提前致谢!

增加:例如,在file1中我有:

番茄2.154 3.789

Apple 1.458 3.578

橙色2.487 4.045

在file2中:

香蕉2.892

Apple 1.687

芒果2.083

我想更改file2,它将是:

香蕉2.892

Apple 3.578

芒果2.083

bash awk
1个回答
0
投票

使用这个作为file1

var1 junk 101
var2 junk 102
var3 junk 103

这就像file2

var1 201
var2 202
var3 203

这将从file1中提取字段3,其中字段1是var1

awk '$1=="var1"{print $3}' file1
101

这将用file2(101)替换x中的第2场,其中第一个字段是var2

awk -v x=101 '$1=="var2"{$2=x}1' file2
var1 201
var2 101
var3 203

结合它们,你得到:

awk -v x=$(awk '$1=="var1"{print $3}' file1) '$1=="var2"{$2=x}1' file2
var1 201
var2 101
var3 203

假设你要覆盖第一个文件,你可以做一个条件的mv,它只在事情有效的情况下运行:

awk -v x=$(awk '$1=="var1"{print $3}' file1) '$1=="var2"{$2=x}1' file2 > /tmp/a && mv /tmp/a file2
© www.soinside.com 2019 - 2024. All rights reserved.