awkを使用して一意の文字のみを残し、別のテキスト文字列から1つのテキスト文字列を減算します。

awkを使用して一意の文字のみを残し、別のテキスト文字列から1つのテキスト文字列を減算します。

たとえば、awkを使用しているように、テキストを含む別の列からテキストを含むデータ列を減算して、一意の文字を含む3番目の列を取得する方法はありますか?

入力する

ab   a
cd   d    
efg  ef

希望の出力:

ab   a   b
cd   d   c
efg  ef  g

ベストアンサー1

はい、awk適切な選択です。

awk 'NF{t=$1;gsub("["$2"]","",t);print$0,t}' input

2番目のフィールドに正規表現の文字クラスの特別な意味を持つ文字を含めることができる場合は、その文字をエスケープする必要があります。 POSIXでこの問題を解決するのにawk時間がかかるので、GNUの代替案を公開しますawk

gawk 'NF{print$0,gensub("["gensub(/([\[\]^-])/,"\\\\\\1","g",$2)"]","","g",$1)}' input

おすすめ記事