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