アンダースコアをスペースに分けるにはどうすればいいですか?

アンダースコアをスペースに分けるにはどうすればいいですか?

以下のデータがあります:

ID  Affection   rs3117294   rs2747453   rs2747454   rs2747457   rs3131888
D0024949    0   C_C A_G A_G A_A A_G
D0024302    0   A_C A_A A_G A_A A_A
D0023151    0   C_C A_G A_A A_A G_G
D0022042    0   A_C A_A G_G A_A A_A
D0021275    0   C_C A_G A_G A_A A_G
D0021163    0   A_A A_A G_G A_A A_A
D0020795    0   A_A A_A G_G A_C A_G
D0020691    0   A_A A_A G_G A_C A_G
D0019121    0   A_A A_A G_G C_C G_G

アンダースコアをスペースにして、C_C を C C にしたいと思います。

どうすればそれができるでしょうか? コードを一般化して、私が持っているデータ全体に適用できるようにしてください。

「私のコードではない」誰かから次のコードを受け取りました sed '1d' plink.raw | sed 's/_/ /g' > plinkv2.rawが、空のセルが表示され、データが完全ではありません。

答え1

GNU sed:

sed -itmp 's/\(\w\)_\(\w\)/\1 \2/g' file

これfileにより、オリジナルのバックアップが上書きされ、保存されますfile.tmp

POSIX sed:

sed 's/\([[:alpha:]]\)_\([[:alpha:]]\)/\1 \2/g' file > file2

別のファイルにリダイレクトする必要があります。file2必要な場合は、元のファイルにコピーしてください。

どちらも「後方参照」の概念を使用します。パターン内でテキストを\(..で囲むと、、 などの置換で使用できるようになります。\)\1\2

答え2

Please find the below command and output

ファイル全体で_をスペースに置き換えます

awk '{gsub("_"," ",$0);print $0}' j.txt 
D0024949    0   C C A G A G A A A G
D0024302    0   A C A A A G A A A A
D0023151    0   C C A G A A A A G G
D0022042    0   A C A A G G A A A A
D0021275    0   C C A G A G A A A G
D0021163    0   A A A A G G A A A A
D0020795    0   A A A A G G A C A G
D0020691    0   A A A A G G A C A G
D0019121    0   A A A A G G C C G G

最初の一致のみを置き換えたい場合

sed "s/_/ /1" 入力ファイル

ご不明な点がございましたら、適切な入力と出力をご提供ください。

関連情報