あるファイルから値を抽出し、別の値を置き換える別のファイルに挿入します。

あるファイルから値を抽出し、別の値を置き換える別のファイルに挿入します。

2つのファイルがあり、対応する行番号は同じではありません。しかし、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
  • パート1::FNR==NR&&$1=="tid.setnr"{x=$3}実行しfile2て値()を持つ変数が見つかったら検索しますtid.setnrx110
  • パート 2: NR!=FNR{if($1=="tid.setnr"){$3=x}print}: trought file1, search を実行してtid.setnr見つけた場合、3 番目のフィールド ( $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の行に置き換えます。

関連情報