如何將底線分隔成空格?

如何將底線分隔成空格?

我有以下數據:

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" 輸入文件

如需任何說明,請告知我們,請提供正確的輸入和輸出

相關內容