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