我有以下文件作为输入:
chr1 HAVANA exon 11869 12227 . + . gene_id "ENSG00000223972.5_2"; transcript_id "ENST00000456328.2_1"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; transcript_type "processed_transcript"; transcript_name "DDX11L1-002"; exon_number 1; exon_id "ENSE00002234944.1_1"; level 2; transcript_support_level 1; tag "basic"; havana_gene "OTTHUMG00000000961.2_2"; havana_transcript "OTTHUMT00000362751.1_1"; remap_original_location "chr1:+:11869-12227"; remap_status "full_contig";
chr1 HAVANA exon 12010 12057 . + . gene_id "ENSG00000223972.5_2"; transcript_id "ENST00000450305.2_1"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; transcript_type "transcribed_unprocessed_pseudogene"; transcript_name "DDX11L1-001"; exon_number 1; exon_id "ENSE00001948541.1_1"; level 2; transcript_support_level "NA"; ont "PGO:0000005"; ont "PGO:0000019"; tag "basic"; havana_gene "OTTHUMG00000000961.2_2"; havana_transcript "OTTHUMT00000002844.2_1"; remap_original_location "chr1:+:12010-12057"; remap_status "full_contig";
这是一个由制表符分隔的 9 列文件。
我想打印第 1,4,5,7 列和第 9 列的gene_name 部分,这样输出应该是
chr1 11869 12227 + DDX11L1
chr1 12010 12057 + DDX11L1
我想过使用 awk 和 sed 组合,但我无法得到我想要的
awk -v OFS="\t" -F "\t" '{print $1,$4,$5,$7,$9}' | sed 's/gene_name\s"\(.+\)";\stran*/\1/'
任何帮助,将不胜感激。
谢谢
答案1
如果您有 GNU awk,您可以使用gensub
合适的正则表达式进行替换,例如假设所有内容gene_id
都是单个制表符分隔的字段 9:
gawk -F '\t' '{$9 = gensub(/.*gene_name "([^"]*)".*/,"\\1","1",$9); print $1,$4,$5,$7,$9}' input
chr1 11869 12227 + DDX11L1
chr1 12010 12057 + DDX11L1
答案2
与多个分隔符一起使用awk
。
awk -F"[\" \t]" '{print $1,$11,$14,$20,$40}' infile.txt
答案3
awk
使用空格作为分隔符。
尝试这个:
$ awk '{print $1, $4, $5, $7, substr($16, 2, 7) }' file
chr1 11869 12227 + DDX11L1
chr1 12010 12057 + DDX11L1