열 내용을 변경하는 방법

열 내용을 변경하는 방법

나는 이 입력을 가지고 있습니다;

scaffold10x_1   AUGUSTUS    gene    72040   72306   0.67    -   .   g4
scaffold10x_1   AUGUSTUS    transcript  72040   72306   0.67    -   .   g4.t1
scaffold10x_1   AUGUSTUS    stop_codon  72040   72042   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    CDS 72040   72306   0.67    -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    exon    72040   72306   .   -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    start_codon 72304   72306   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    gene    72500   72970   0.99    -   .   g5
scaffold10x_1   AUGUSTUS    transcript  72500   72970   0.99    -   .   g5.t1
scaffold10x_1   AUGUSTUS    stop_codon  72500   72502   .   -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    CDS 72500   72970   0.99    -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    exon    72500   72970   .   -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    start_codon 72968   72970   .   -   0   transcript_id "g5.t1"; gene_id "g5";

나는 이와 같은 출력을 갖고 싶습니다.

scaffold10x_1   AUGUSTUS    gene    72040   72306   0.67    -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    transcript  72040   72306   0.67    -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    stop_codon  72040   72042   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    CDS 72040   72306   0.67    -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    exon    72040   72306   .   -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    start_codon 72304   72306   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    gene    72500   72970   0.99    -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    transcript  72500   72970   0.99    -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    stop_codon  72500   72502   .   -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    CDS 72500   72970   0.99    -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    exon    72500   72970   .   -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    start_codon 72968   72970   .   -   0   transcript_id "g5.t1"; gene_id "g5";

Linux에서 sed 명령을 사용하여 원하는 출력을 얻는 방법은 무엇입니까? 고마워요 카이

답변1

일반적으로 대체 논리와 일부 경계 조건을 설명하는 것이 가장 좋으므로 추측할 필요가 없습니다. 그렇지 않으므로 몇 가지 가정을 해야 합니다.

  • g행의 마지막 열 뒤에 숫자(여러 개일 수 있음)와 선택 사항 .t1(항상 )이 오는 경우 1바꾸고 싶습니다.
  • 라인에 a가 있든 없든 , 충분 .t1해야 하고 , 없어야 합니다.transcript_id.t1gene_id
  • 열 구분 기호는 공백입니다.

이 경우 다음 스크립트가 작동해야 합니다. 그렇지 않으면 다음과 같이 조정해야 합니다.

sed -E 's/ (g[0-9]*)(\.t1)?$/ transscript_id "\1.t1"; gene_id "\1";/' yourfile

관련 정보