[英]Extract a pattern using awk in a specific column
我想通過只取最后一列的一個特定部分來修改文件(gff3格式)!
我的文件看起來像這樣,九個列由制表符空格分隔:
NW_015494524.1 Gnomon CDS 1220137 1220159。 - 0 ID = cds20267; Parent = rna22739; Dbxref = GeneID:107513619,Genbank:XP_016006018.1; Name = XP_016006018.1; gbkey = CDS; gene = A3GALT2; product = alpha_1%2C3-galactosyltransferase_2 protein_id = XP_016006018.1
我想只提取最后一欄($ 9)中的基因名稱(; gene = XXX;)。 輸出:
NW_015494524.1 Gnomon CDS 1220137 1220159。 - 0 A3GALT2
完成此操作后,我想將第4,5,7,8列和第9列中提取的值組合在一個唯一的列中。預期輸出:
A3GALT2 1220137 1220159 - 0
我曾嘗試使用awk
在最后一列中僅采用模式gene = xxxx。 我的基因名稱是帶或不帶數字的大寫字母; 並由';'分隔 第九欄中的分號。
awk FS "[ \t]" '$9 ~/gene=[A-Z0-9]$/ {print $0, $4, $5, $7, $8}' <file>
它不起作用。 還有另一種方法可以用awk
或sed
或grep
做得更好嗎?
感謝您的幫助。
以下awk應該幫助你。
awk '{sub(/.*gene=/,"",$(NF-1));sub(/\;.*/,"",$(NF-1));$NF=""} 1' Input_file
輸出如下。
NW_015494524.1 Gnomon CDS 1220137 1220159 . - 0 A3GALT2
編輯:正如我在評論中提到的那樣,我很困惑你需要哪個輸出,如果你需要你的第二個顯示輸出,可能會幫助你。
awk '$9 ~ /.*gene=/{sub(/.*gene=/,"",$(NF-1));sub(/\;.*/,"",$(NF-1));print $9,$4,$5,$7,$8} ' Input_file
輸出如下。
A3GALT2 1220137 1220159 - 0
awk解決方案:
awk '{ split($9,a,";"); print substr(a[6],6),$4,$5,$7,$8 }' file
split($9,a,";")
- 將第9個字段拆分成一個塊數組a
;
作為分隔符
substr(a[6],6)
- 從substring gene=XXXXXXXX
提取所需的基因名稱
輸出:
A3GALT2 1220137 1220159 - 0
一個簡單的awk解決方案
$ awk '{match($9,/gene=(\w+);/,a); print a[1],$4,$5,$7,$8}' file
A3GALT2 1220137 1220159 - 0
{match($9,/gene=(\\w+);/,a);
:這將匹配正則表達式gene=(\\w+);
$9
和捕獲組(\\w+)
將存儲在數組a
,就是這樣。
感謝您的回復和幫助。 是的,我想要你輸出的輸出。 僅保留基因名稱,位置,鏈和相位信息。 它們將被用作新的fasta seqs的標題。 我會嘗試這些命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.