いいですね。このxmlファイルがあります。各キー値を別のファイル(txt)の値に置き換える必要があります。どちらのファイルも並べ替えられ、行20がxml内にあります。
<word key="ACTIVE" group="Service application" value="testvalue1"/>
2番目のファイルでは、行20は次のようになります。
testvalue2
testvalue1からtestvalue2に値を変更する方法を探しています。
ベストアンサー1
これはうまくいきます。
新しい値ファイルをロードし、行番号をキーとして古い値を新しい値に置き換えてxmlファイルを処理します。
awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/value=".*"\/>/,"value=\""a[FNR]"\"\/>","g",$NF);print}' file2 file
#OR working with regex groups:
awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/(value=")(.*)(".+)/,"\\1"a[FNR]"\\3","g",$NF);print}' file2 file
テスト:
$ cat file
<word key="ACTIVE" group="Service application" value="testvalue1"/>
<word key="ACTIVE" group="Service application" value="testvalue2"/>
<word key="ACTIVE" group="Service application" value="testvalue3"/>
<word key="ACTIVE" group="Service application" value="testvalue4"/>
<word key="ACTIVE" group="Service application" value=""/>
$ cat file2
newvalue1
newvalue2
newvalue3
newvalue4
newvalue5
$ awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/value=".*"\/>/,"value=\""a[FNR]"\"\/>","g",$NF);print}' file2 file
<word key="ACTIVE" group="Service application" value="newvalue1"/>
<word key="ACTIVE" group="Service application" value="newvalue2"/>
<word key="ACTIVE" group="Service application" value="newvalue3"/>
<word key="ACTIVE" group="Service application" value="newvalue4"/>
<word key="ACTIVE" group="Service application" value="newvalue5"/>