ファイル名が与えられたら、chrIII:834297-835206:-.miRanda.txt
最小BED形式(タブ区切りデータ)を生成したいと思います。
chrIII 834297 835206 -
整数の後に最初の区切り文字をsed
変換するように言うのが難しいです(つまり、2番目の発生時にチェーン情報を混乱させないでください)。-
私がやろうとしていることはecho *.miRanda.txt | sed 's/.miRanda.txt//g' | sed 's/:/\t/g; s/[0-9]-/\t/g'
間違っていて、誰かが助けることができれば幸いです。 (私は[0-9]
仕事が必要なパターンがあると思いますが、用語を知らず、これをグーグルするのに苦労しています。)
ソリューションは必ずしも要件ではありませんsed
。
答え1
これは1つの方法です(GNUsed
または他のサポートされている方法を使用-E
)。
$ echo chrIII:834297-835206:-.miRanda.txt |
sed -E 's/^(chr[^:]+):([0-9]+)-([0-9]+):([^.]+).*/\1\t\2\t\3\t\4/'
chrIII 834297 835206 -
.
これは、4番目のフィールド(ベッドファイルの名前)としてaを持つことができないと仮定します。これが安全な仮定ではなく拡張機能を使用する必要がある場合は、次のことができます。
$ echo chrIII:834297-835206:-.miRanda.txt |
sed -E 's/^(chr[^:]+):([0-9]+)-([0-9]+):(.+)\.miRanda.txt/\1\t\2\t\3\t\4/'
chrIII 834297 835206 -
また、最低ベッドタイプには4番目のフィールドはまったく必要ありません。有効なベッドファイルは次のとおりです。
chrIII 834297 835206
最後に、あなたのアプローチはほぼ必ず必要以上に少し複雑ですが。最後の整数はs/[0-9]-/\1\t/
数値の合計をタブに置き換えたため、最初から削除しました。-
これは本質的にあなたのコマンドと同じですが、この問題を説明し、不要なグローバルg
演算子を削除するためにわずかに修正されました。
$ echo chrIII:834297-835206:-.miRanda.txt |
sed 's/\.miRanda.txt//' |
sed -E 's/:/\t/g; s/([0-9])-/\1\t/'
chrIII 834297 835206 -
なぜこれが失敗したと言うのかわかりません。