前提・実現したいこと
初心者です。
awk を使ったフィールドの置換について質問です。
特定のフィールド内に重複した要素がある時に識別番号を付与したいのですが、うまくいきません。
以下の gene_name "7SK" 1行目と2行目が重複しておりこのような行がいくつかあります。
そこで、それぞれに識別番号をつけ、7SK-0,7SK-1のようにしたいと考えております。
bash
1$ head -3 fantom_cat_stringent_kd.gtf| sort -f -k 6 -t ";" |awk -F\" '{print $0}'| less 2 3chr8 FANTOM gene 144623796 144624570 . + . gene_id "ENSG00000254144.2"; geneSuperClass "all_lncRNA"; geneClass "lncRNA_divergent"; geneSubClass "divergent_promoters"; gene_type "antisense"; gene_name "7SK"; coding_status "nonCoding"; cumulative_support "FANTOM:GENCODE"; geneCategory "p_lncRNA_divergent"; DHS_type "DHS_promoter"; 4chr21 FANTOM gene 26473444 26475653 . + . gene_id "ENSG00000232512.2"; geneSuperClass "all_lncRNA"; geneClass "lncRNA_intergenic"; geneSubClass "far_from_coding_genes"; gene_type "lincRNA"; gene_name "7SK"; coding_status "nonCoding"; cumulative_support "GENCODE:HUBDMAP"; geneCategory "__na"; DHS_type "not_DHS"; 5chr19 FANTOM gene 58856544 58864858 . - . gene_id "ENSG00000121410.7"; geneSuperClass "all_mRNA"; geneClass "coding_mRNA"; geneSubClass "protein_coding"; gene_type "protein_coding"; gene_name "A1BG"; coding_status "coding"; cumulative_support "FANTOM:GENCODE"; geneCategory "coding_mRNA"; DHS_type "DHS_promoter";
試したこと
置換したい識別番号付与済みのtxtファイルを用意して、
bash
1$ head -3 replace.txt 27SK 37SK-1 4A1BG 5 6$ n=`cat replace.txt` 7 8$ cat fantom_cat_stringent_kd.gtf| sort -f -k 6 -t ";" |awk -F\" '($12='${n}'){print $0}'|head 9awk: syntax error at source line 1 10 context is 11 >>> <<< 12 missing ) 13awk: bailing out at source line 1 14
としてみたのですがなかなかうまくいく方法が見つからないので、ご教授いただけると幸いです。
対象カラムは gene_name 限定ということでいいですか?
第17フィールドを書き換えるのは比較的簡単。 gene_nameが第16フィールド以外にも出てくるからそれを全部探すとやや面倒ですが。どちらでしょうか?あと、最初の出現を7Sk-0とするのではなく、7SK→7SK-1→7SK-2でいいなら置換したい識別番号付与済みのtxtを作らなくてもできます。
otn様
はい、gene_name をしめす「" "」で囲われた部分を書き換えたいということです。
a_saitoh様 第17フィールドを書き換えるのでよいのですが、差し支えなければ後者のやり方もお教えいただけますでしょうか。また、識別できれば良いので7SK→7SK-1→7SK-2 でも問題ありません。
回答3件
あなたの回答
tips
プレビュー