从一个文件中提取值并将其插入到另一个文件中替换其他值

从一个文件中提取值并将其插入到另一个文件中替换其他值

我有两个文件,它们的行号不相同。但我想替换使用命令file1引用的行。file2sed

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

file2

tid.setnr := 110 (This is correct and I want to place this number in file no. 1)

答案1

一个awk办法:

awk 'FNR==NR&&$1=="tid.setnr"{x=$3} NR!=FNR{if($1=="tid.setnr"){$3=x}print}' file2 file1
  • 第一部分:FNR==NR&&$1=="tid.setnr"{x=$3}:运行file2并搜索,如果找到值为 ( ) 的tid.setnr变量。x110
  • 第二部分:NR!=FNR{if($1=="tid.setnr"){$3=x}print}:运行 trought file1,搜索tid.setnr,如果找到,则将第三个字段 ( $3) 替换为其他文件中找到的数字。

答案2

首先从 file-2 中提取数字并将其保存为变量:

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

然后替换 file-1 中的这个数字:

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

答案3

这个怎么样:

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

该代码将使用 file1.txt 中的行创建 file3.txt,任何与 file2.txt 中的模式匹配的行都将替换为 file2.txt 中的行

我在这里做了很多假设...上面将在 file1 中查找“tid.setnr”并将整行替换为 file2.txt 中的行

相关内容