내 데이터의 처음 몇 행은 다음과 같습니다.
scaffold10x_1 AUGUSTUS gene 3591 3908 0.61 - . g1
scaffold10x_1 AUGUSTUS transcript 3591 3908 0.61 - . g1.t1
scaffold10x_1 AUGUSTUS stop_codon 3591 3593 . - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS CDS 3591 3908 0.61 - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS exon 3591 3908 . - . transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS start_codon 3906 3908 . - 0 transcript_id "g1.t1"; gene_id "g1";
";
마지막 열에서 누락된 행에 추가해야 합니다 . grep -v transcript_id canada.gtf | grep -v "^#"
누락된 행을 식별하는 데 익숙해졌습니다 . 이 작업을 수행하기 위해 Linux 명령을 사용할 수 있습니까?
답변1
sed
방법:
sed 's/[^[:space:]]\+[^;[:space:]]$/"&";/' file
산출:
scaffold10x_1 AUGUSTUS gene 3591 3908 0.61 - . "g1";
scaffold10x_1 AUGUSTUS transcript 3591 3908 0.61 - . "g1.t1";
scaffold10x_1 AUGUSTUS stop_codon 3591 3593 . - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS CDS 3591 3908 0.61 - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS exon 3591 3908 . - . transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS start_codon 3906 3908 . - 0 transcript_id "g1.t1"; gene_id "g1";
답변2
이 sed
명령은 각 줄이 세미콜론으로 끝나고 각 줄의 마지막 단어가 인용되도록 합니다.
sed -e 's/"\?\([a-z0-9.]\+\)"\?;*$/"\1";/' canada.gtf
다음은 명령의 출력입니다.
scaffold10x_1 AUGUSTUS gene 3591 3908 0.61 - . "g1";
scaffold10x_1 AUGUSTUS transcript 3591 3908 0.61 - . "g1.t1";
scaffold10x_1 AUGUSTUS stop_codon 3591 3593 . - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS CDS 3591 3908 0.61 - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS exon 3591 3908 . - . transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS start_codon 3906 3908 . - 0 transcript_id "g1.t1"; gene_id "g1";
파일을 제자리에서 수정하려면 다음 -i
플래그를 사용할 수 있습니다.
sed -i -e 's/"\?\([a-z0-9.]\+\)"\?;*$/"\1";/' canada.gtf
각 줄이 다음으로 끝나는지 확인하려는 경우 (그리고 줄의 마지막 단어 시작 부분에서 일치 항목이 발생하는 것을 ";
원하지 않는 경우 ) 다음을 사용할 수 있습니다."
sed -e 's/"\?;\?$/";/' canada.gtf
다음은 명령의 출력입니다.
scaffold10x_1 AUGUSTUS gene 3591 3908 0.61 - . g1";
scaffold10x_1 AUGUSTUS transcript 3591 3908 0.61 - . g1.t1";
scaffold10x_1 AUGUSTUS stop_codon 3591 3593 . - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS CDS 3591 3908 0.61 - 0 transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS exon 3591 3908 . - . transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1 AUGUSTUS start_codon 3906 3908 . - 0 transcript_id "g1.t1"; gene_id "g1";
답변3
@Kay NewEdge 다라모라
다음 oneliner를 사용하여 결과를 얻었습니다.
암호:
sed 's/[a-z][0-9]$/&";/g' example.txt |sed 's/[a-z][0-9].\{2\}/"&/g'
산출
scaffol"d10x_1 AUGUSTUS gene 3591 3908 0.61 - . "g1";
scaffol"d10x_1 AUGUSTUS transcript 3591 3908 0.61 - . "g1.t1";
scaffol"d10x_1 AUGUSTUS stop_codon 3591 3593 . - 0 transcript_id ""g1.t1"; gene_id ""g1";
scaffol"d10x_1 AUGUSTUS CDS 3591 3908 0.61 - 0 transcript_id ""g1.t1"; gene_id ""g1";
scaffol"d10x_1 AUGUSTUS exon 3591 3908 . - . transcript_id ""g1.t1"; gene_id ""g1";
scaffol"d10x_1 AUGUSTUS start_codon 3906 3908 . - 0 transcript_id ""g1.t1"; gene_id ""g1";