2

別の質問です。私はペアでヌクレオチドデータを持っています

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置き換えられ、..私が望むようにペアを分割することはありません(前後にスペースを入れるか、他のペアごとに分割するか、同様です!)。

4

4 に答える 4

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]をグループ ( \(...\)) に入れ、大文字と一致して 2 番目のグループに格納します。\1次に、この一致は最初のグループ ( ) スペースの 2 番目のグループ ( )に置き換えられ\2ます。

注:
2 文字を超えるシーケンスがある場合、これは失敗します。

于 2012-08-16T10:14:32.437 に答える
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
于 2012-08-16T10:41:03.257 に答える
0

これは、実際には awk よりも python の方が簡単です。

echo caca | python -c 'import sys;\
for line in sys.stdin: print (" ".join(line))'

カカ

于 2016-02-17T05:02:37.480 に答える
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

この 2 番目の方法は機能しますが、誤検知が発生する可能性があります。

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
于 2012-08-16T11:41:54.943 に答える