私は大きなものを持っていますgtf
。ここでeg.gtf
次のように共有します。
chr22 Cufflinks transcript 10695955 10696708 . + . transcript_id "first_11345700"; gene_id "XLOC_158970"; gene_name "XLOC_158970"; oId "TCONS_00353198"; class_code "u"; tss_id "TSS369767"; original_gene_id "XLOC_158970";
chr22 Cufflinks exon 10702915 10703826 . + . transcript_id "first_11345701"; gene_id "ENSG00000277248.1"; gene_name "ENSG00000277248.1"; exon_number "1"; original_gene_id "ENSG00000277248.1";
chr22 Cufflinks transcript 10702915 10707278 . + . transcript_id "first_11345701"; gene_id "ENSG00000277248.1"; gene_name "ENSG00000277248.1"; oId "TCONS_00353199"; class_code "u"; tss_id "TSS369769"; original_gene_id "ENSG00000277248.1";
awk
次の列番号を使用して必須フィールドを抽出しました。
cat eg.gtf | awk 'OFS="\t" {if ($3=="transcript") {print $1,$4-1,$5,$12,$7}}' | tr -d '";'
出力は次のとおりです。
chr22 10695954 10696708 XLOC_158970 +
chr22 10702914 10707278 ENSG00000277248.1 +
12
コマンドに列番号を使用したくありませんが、awk
名前のあるフィールドを抽出したいと思います。
メモ: 12th column has different names, starting with E or X or M or N or S
。
12
コマンドに列番号を指定せずに12番目のフィールドをどのように取得できますかawk
?gene_id
列11の用語を使用してフィールド12を取得する方法はありますか?
ベストアンサー1
すべてのUnixシステムのすべてのシェルでawkを使用してください。
$ cat tst.awk
BEGIN {
FS=OFS="\t"
}
$3 == "transcript" {
n = split($NF,tmp,/[; "]+/)
for ( i=1; i<n; i+=2 ) {
vals[tmp[i]] = tmp[i+1]
}
print $1, $4-1, $5, vals["gene_id"], $7
}
$ awk -f tst.awk file
chr22 10695954 10696708 XLOC_158970 +
chr22 10702914 10707278 ENSG00000277248.1 +