【问题标题】:Replace number in one file with the number in other file将一个文件中的数字替换为另一个文件中的数字
【发布时间】:2018-05-09 07:19:44
【问题描述】:

我有问题。我有两个文件(file1 和 file2)。这两个文件都包含数字(具有不同的值),这些数字表征来自不同估计的相同变量。例如,在文件 1 中,此数字 1 位于字段 $3 中以名称 var1 开头的行中,在文件 2 中,此数字 2 位于以名称 var2 开头的行中并位于字段 $2 中。我想从 file1 中取出 number1 并用它替换 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

苹果 1.458 3.578

橙色 2.487 4.045

在文件 2 中:

香蕉 2.892

苹果 1.687

芒果 2.083

我想改变 file2 ,它会是:

香蕉 2.892

苹果 3.578

芒果 2.083

【问题讨论】:

  • 欢迎来到 SO,您能否在您的帖子中发布输入示例和输出示例,以便我们更好地理解问题。
  • 您可以添加一些输入文件的示例吗?
  • 谢谢!我在上面添加了一些示例。

标签: bash awk


【解决方案1】:

将其用作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

【讨论】:

    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 2019-03-21
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多