Extraia o valor de um arquivo e insira-o em outro arquivo, substituindo algum outro valor

0

Eu tenho dois arquivos, cujos números de linha não são iguais. Mas em file1 eu quero substituir linhas tomando referência do comando file2 using sed .

Em file1 :

tid.infno := 72
tid.setnr := 120 (This number 120 is wrong and It will be 110)
tid.typeidc := 2
tid.typeidm := 1
writedb
clear

Em file2 :

tid.setnr := 110 (This is correct and I want to place this number in file no. 1)
    
por Nainita Sadhukhan 05.06.2015 / 12:50

3 respostas

1

Uma solução awk :

awk 'FNR==NR&&$1=="tid.setnr"{x=$3} NR!=FNR{if($1=="tid.setnr"){$3=x}print}' file2 file1
  • Primeira parte: FNR==NR&&$1=="tid.setnr"{x=$3} : percorra file2 e pesquise tid.setnr , se for encontrada a variável x no valor ( 110 ).
  • Segunda parte: NR!=FNR{if($1=="tid.setnr"){$3=x}print} : Executar trought file1 , pesquisar tid.setnr e, se encontrado, substituir o terceiro campo ( $3 ) pelo número encontrado no outro arquivo.
por 05.06.2015 / 13:31
0

Primeiro extraia o número do arquivo-2 e salve-o como uma variável:

correctNo='grep -oP "setnr\s\:\=\s\K\d+" file2.txt'

Em seguida, substitua esse número no arquivo 1:

sed -re "s/(setnr\s\:\=\s)([0-9]+)/$correctNo/g" file1.txt
    
por 05.06.2015 / 12:56
0

Que tal isso:

$ for line in 'cat file2.txt'; do
pattern= 'sed "s/\s*:=.*//"'
sed "s/$pattern.*/$line/" file1.txt > file3.txt
done

O código criará file3.txt com linhas de file1.txt, todas as linhas que corresponderem ao padrão de file2.txt serão substituídas pelas linhas de file2.txt

Eu faço algumas suposições aqui ... o acima irá procurar por "tid.setnr" no arquivo1 e substituir a linha inteira pela linha do arquivo2.txt

    
por 05.06.2015 / 13:15