テキストをawkに置き換える

テキストをawkに置き換える

2つの列を持つテキストファイルがあります。最初の項目には、コードのリスト(GRT986Eなど)が含まれているか、他の場合は低ダッシュ(TRY546_TRE578など)で区切られた2つの部分からなるオブジェクトがあります。オブジェクト間に 1 つ以上の空行がある場合もあります。 2番目の列の一部のオブジェクトには関連変数があります。ファイルは次のようになります。

QR846OI bbbbbbbbb

PO3R56  ddddddd
UJ6Y68 eeeeeee


YU654R

PL92WS
GH654Y _ HUY765R tttttt

2番目の列を取得し、テキストを「is」にのみ置き換えたいのですが、最初の列と2番目の列を「、」で区切りたいと思います。出力.txtは次のようになります。

QR846OI,yes

PO3R56,yes
UJ6Y68,yes


YU654R

PL92WS
GH654Y _ HUY765R,yes

私は次のコマンドラインを使います。

awk -F , '{ if ($2 != " ") $2="yes";}1' OFS=, good_interactors.txt > output.txt

しかし、効果はあまり良くありません。

ベストアンサー1

アンダースコアの周囲のスペースを削除してsedから、オプションで復元します。これにより簡単になりますawk

awk '{OFS=","}NF==2{$2="yes"}1' <(sed 's/ _ /_/g' file) \
| sed 's/_/ _ /g' # <- this part is optional

出力:

QR846OI,yes

PO3R56,yes
UJ6Y68,yes


YU654R

PL92WS
GH654Y _ HUY765R,yes

おすすめ記事