我有一个文件需要更改第三列的格式。
以下是 .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";