我有一个如下所示的文件:
GENERSID1RSID2VALUE
ENSG00000242220rs2826052rs28260520.20961262553802
ENSG00000242220rs2826052rs798932040.00583452893352463
ENSG00000242220rs2826052rs117256228-0.003012912482066
我想在每个值之间添加空格,因此它应该看起来像:
GENE RSID1 RSID2 VALUE
ENSG00000242220 rs2826052 rs2826052 0.20961262553802
ENSG00000242220 rs2826052 rs79893204 0.00583452893352463
ENSG00000242220 rs2826052 rs117256228 -0.003012912482066
我在 sed 中使用了这个命令,我能够做到这一点:
sed“s/rs/ &/g” Model_training_chr21_covariances.txt > Model_training_chr21_covariances1.txt
sed“s/-0/ &/” Model_training_chr21_covariances1.txt > Model_training_chr21_covariances2.txt
ENSG00000242220 rs2826052 rs28260520.20961262553802
ENSG00000242220 rs2826052 rs798932040.00583452893352463
ENSG00000242220 rs2826052 rs117256228 -0.003012912482066
基本上负数-0.003现在已经分开了,但是0.209和0.0058没有分开,我只能在-0之前添加空格。值而不是 0。? 有什么办法可以解决这个问题吗? 谢谢你
您可以将所有正则表达式合并到一个 sed 命令中以节省一些处理时间。
sed -e 's/rs/ &/g' -e 's/-*0\./ &/' \
Model_training_chr21_covariances.txt \
> Model_training_chr21_covariances1.txt
-* 0 or more - characters
0 a literal '0'
\. a literal '.'
假设:
rs
rs
不会出现在数据中的其他任何位置(除了第二/第三字段的前两个字符)-
)+ 0.
调整和组合 OP 的
sed
脚本:
$ sed 's/rs/ &/g; s/[-]*.[.]/ &/g' sample.txt
GENERSID1RSID2VALUE
ENSG00000242220 rs2826052 rs2826052 0.20961262553802
ENSG00000242220 rs2826052 rs79893204 0.00583452893352463
ENSG00000242220 rs2826052 rs117256228 -0.003012912482066