입력으로 다음 파일이 있습니다.
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