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

时间:2018-05-09 07:19:44

标签: bash awk

我有问题。我有两个文件(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

Orange 2.487 4.045

在file2中:

Banana 2.892

Apple 1.687

芒果2.083

我想更改file2,它会是:

Banana 2.892

Apple 3.578

芒果2.083

1 个答案:

答案 0 :(得分: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中的字段2替换为x(101),其中第一个字段为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