次のデータセットがあります。
CHROM POS N_ALLELES N_CHR {ALLELE:FREQ} 6 85401233 2 46 T:1 A:0 6 85401234 2 46 C:1 G:0 6 85401235 2 46 T:1 G:0
5列のヘッダを変更した後、2列に分けたいと思います。
REF ALT T:1 A:0 C:1 G:0 T:1 G:0
sed を使用して ':' をタブ区切り文字に変換できます。効果がある
sed '1s/\:/\t/g' filename
しかし、このコマンドは私が望むようには機能しません。
sed '1s/\{ALLELE:/ALT\t/g' filename
次のメッセージを提供します。
sed: -e expression #1, char 20: Invalid preceding regular expression
そして
sed '1s/\:/\t/g' | '1s/\{ALLELE/REF /g' filename
-bash: 1s/\{ALLELE/REF /g: No such file or directory
ベストアンサー1
ファイルの内容を変更するにはed
標準エディタが必要です。
$ cat filename
CHROM POS N_ALLELES N_CHR {ALLELE:FREQ}
6 85401233 2 46 T:1 A:0
6 85401234 2 46 C:1 G:0
6 85401235 2 46 T:1 G:0
$ printf '%b\n' '1s/{ALLELE:FREQ}/REF\011ALT/' 'w' 'q'|ed -s filename
$ cat filename
CHROM POS N_ALLELES N_CHR REF ALT
6 85401233 2 46 T:1 A:0
6 85401234 2 46 C:1 G:0
6 85401235 2 46 T:1 G:0
'1s/{ALLELE:FREQ}/REF\011ALT/'
行1に移動して置き換えます。\011
tabに変換されたタブ文字の8進数表現ですprintf
。'w' 'q'
ファイルへの変更を保存し、エディタを終了します。
sed '1s/\{ALLELE:/ALT\t/g' filename
\{
デフォルトの正規表現が特別なので失敗します。あなたが意味するものは簡単です{
。
そしてここ
sed '1s/\:/\t/g' | '1s/\{ALLELE/REF /g' filename
最初のsedに入力ファイルを提供していないので失敗しました。正確で直接的なsedコマンドは次のとおりです。
sed '1s/{ALLELE:FREQ}/REF\tALT/' filename
そのフラグも必要g
ありません。行に置き換える必要がある一致は1つだけです。