문자가 없는 줄에 문자를 추가하는 방법

문자가 없는 줄에 문자를 추가하는 방법

내 데이터의 처음 몇 행은 다음과 같습니다.

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";  

관련 정보