Заменить число в одном файле на число в другом файле - PullRequest
0 голосов
/ 09 мая 2018

У меня проблема. У меня есть два файла (файл1 и файл2). Оба файла содержат числа (с разными значениями), которые характеризуют одну и ту же переменную из разных оценок. В файле1 это число1 находится, например, в строке, начинающейся с имени var1 в поле $ 3, в файле2 это число2 находится в строке, начинающейся с имени var2, и в поле $ 2. Я хочу взять номер1 из файла1 и заменить номер2 в файле2 им. Я попробовал следующий скрипт, но он не работает, в выводе ничего не изменилось по сравнению с исходным файлом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}'

Заранее спасибо!

Добавление: например, в файле1 у меня есть:

помидор 2,154 3,789

Яблоко 1.458 3.578

Оранжевый 2.487 4.045

В файле 2:

Банан 2.892

Apple, 1,687

Манго 2.083

Я хочу изменить file2 так, чтобы это было:

Банан 2.892

Apple, 3.578

Манго 2.083

1 Ответ

0 голосов
/ 09 мая 2018

Используя это как file1:

var1 junk 101
var2 junk 102
var3 junk 103

И это как file2:

var1 201
var2 202
var3 203

Это извлечет поле 3 из file1, где поле 1 равно var1:

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

Это заменит поле 2 в file2 на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...