検索と置換[閉じる]

検索と置換[閉じる]

2つのファイルがあります。 file1.txtの最初の列(「、」で区切られた)は、file2.txtの最初の列と同じです。これら2つのファイルを比較し、file1.txtの2番目の列をfile2.txtに置き換えたいと思います。

ファイル1.txt

ABC-aBc-AbC,abc-abc-abc
AAA-AAA-AAA,aaa-aaa-aaa

ファイル2.txt

テキストテキストABC-aBc-AbCテキストテキストテキストAAA-AAA-AAAテキストテキスト。

答え1

file2.txtこのファイルは、最初の列文字列インスタンスを含むことができる自由形式のテキストファイルであり、file1.txtそれを対応する2番目の列文字列に置き換えたいとします。

正規表現特殊文字が含まれていない場合は、file1.txtそれをsedスクリプトに変換してからsedスクリプトを2番目のファイルに適用することが非常に効率的なアプローチかもしれません。

sed 's/.*/s,&,g/' file1.txt | sed -f- file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

または(今回は の文字列がスペースでfile2.txt区切られていると仮定)の項目に基づいてルックアップテーブルを作成し、フィールドを繰り返してそれに応じて置き換えることができます。file1.txtfile2.txt

awk -F, 'NR==FNR {a[$1]=$2; next} {for (i=1;i<=NF;i++) {if ($i in a) $i = a[$i]}} 1' file1.txt FS='[ \t]+' file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

または

awk -F, 'NR==FNR {a[$1]=$2; next} {for (i=1;i<=NF;i++) {$i = $i in a? a[$i] : $i}} 1' file1.txt FS='[ \t]+' file2.txt
text text abc-abc-abc text text text aaa-aaa-aaa text text.

関連情報