特定の列にのみ二重引用符を挿入する

特定の列にのみ二重引用符を挿入する

3番目の列の形式を変更する必要があるファイルがあります。

以下は.gtfファイルのサンプル行です(タブで区切られています)。

chr1    CAT     gene_id=RP11-54O7.16;transcript_id=ENST00000607769.1-1;
chr1    CAT     gene_id=RP11-54O7.16;transcript_id=ENST00000607769.1-2;

等号を削除し、次のように遺伝子名と成績表名の周りに引用符を入れる必要があります。

chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-1";
chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-2";

これがawk私がorで達成できることですsedか?私の主な問題は、最後の列に引用符を複数回挿入することです。

答え1

このように:

sed 's/=/ "/g; s/;/";/g' file.gtf

または

sed -e 's/=/ "/g' -e 's/;/";/g' file.gtf

chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-1";
chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-2";

答え2

$ awk '{ split($0, a , " +|[=;]", seps); '\
'print a[1] seps[1] a[2] seps[2] a[3] " \"" a[4] "\";" a[5] " \"" a[6] "\""; }' input

chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-1"
chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-2"

答え3

注文する

awk -v replace=' "' -v bo='"' '{gsub(/=/,replace,$0);gsub(";",bo";",$0);print}' file.txt

出力

chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-1";
chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-2";

Python

#!/usr/bin/python
import re
l=open('filename','r')
for i in l:
    print i.strip().replace('=',' "').replace(';','";')

出力

chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-1";
chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-2";

答え4

$ sed 's/=\([^;]*\)/ "\1"/g' file
chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-1";
chr1    CAT     gene_id "RP11-54O7.16";transcript_id "ENST00000607769.1-2";

関連情報