我有个问题。我有两个文件(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
使用这个作为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