2つのファイルがあり、対応する行番号は同じではありません。しかし、file1
コマンドを使用して引用符付きの行を変更したいと思います。file2
sed
存在する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.setnr
。x
110
- パート 2:
NR!=FNR{if($1=="tid.setnr"){$3=x}print}
: troughtfile1
, 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の行に置き換えます。