另一个问题!我有成对的核苷酸数据
1 Affx-14150122 0 75891 00 CT TT CT TT CT
按空格分割,我需要在每对中加一个空格,例如
1 Affx-14150122 0 75891 0 0 C T T T C T T T C T
我已尝试sed 's/[A-Z][A-Z]/ &/g'
和sed 's/[A-Z][A-Z]/& /g'
并且A-Z
都替换为..
并且它永远不会按照我的意愿拆分它(它在前后放置空格或者拆分每对其他对或类似的!)。
答案 0 :(得分:2)
我认为这对你有用,但并不完美!
echo "1 Affx-14150122 0 75891 00 CT TT CT TT CT" | \
sed 's/\(\s[A-Z]\)\([A-Z]\)/\1 \2/g'
给出
1 Affx-14150122 0 75891 00 C T T T C T T T C T
sed 's/\(\s[A-Z]\)\([A-Z]\)/\1 \2/g'
匹配空格(\s
)大写字符([A-Z]
),将其放在一个组(\(...\)
)中,然后匹配大写字符并存储在第二组。然后,此匹配由第一组(\1
)空格第二组(\2
)替换。
注意:强>
如果序列长度超过2个字符,则会失败。
答案 1 :(得分:0)
使用awk
的解决方案,它只修改字符对,并且可能更强大,具体取决于您的输入数据:
echo "1 Affx-14150122 0 75891 00 CT TT CT TT CT" | \
awk '
{
for(i=1;i<=NF;i++) {
if($i ~ /^[A-Z][A-Z]$/){
$i=substr($i,1,1)" "substr($i,2,1)
}
}
}
1'
给出
1 Affx-14150122 0 75891 00 C T T T C T T T C T1
答案 2 :(得分:0)
这可能适合你(GNU sed):
echo '1 Affx-14150122 0 75891 00 CT TT CT TT CT' |
sed ':a;s/\(\s\S\)\(\S\(\s\|$\)\)/\1 \2/g;ta'
1 Affx-14150122 0 75891 0 0 C T T T C T T T C T
第二种方法有效,但可能会出现误报:
echo '1 Affx-14150122 0 75891 00 CT TT CT TT CT' | sed 's/\<\(.\)\(.\)\>/\1 \2/g'
1 Affx-14150122 0 75891 0 0 C T T T C T T T C T
答案 3 :(得分:0)
这在python中实际上比在awk中更容易:
echo caca | python -c 'import sys;\
for line in sys.stdin: print (" ".join(line))'
c a c a