2017-10-24 4 views
2

을 변경하지 않고 AWK와 열을 교체하는 방법이데이터 형식

Chr1 Cufflinks exon 768419 769441 . . . gene_id "XLOC_008282"; transcript_id "TCONS_00014260"; exon_number "1"; oId "CUFF.87.1"; class_code "u"; tss_id "TSS9986"; 
Chr1 Cufflinks exon 1519538 1520185 . . . gene_id "XLOC_008283"; transcript_id "TCONS_00014261"; exon_number "1"; oId "CUFF.169.1"; class_code "u"; tss_id "TSS9987"; 
Chr1 Cufflinks exon 1888251 1888965 . . . gene_id "XLOC_008284"; transcript_id "TCONS_00014262"; exon_number "1"; oId "CUFF.206.1"; class_code "u"; tss_id "TSS9988"; 
Chr1 Cufflinks exon 2865389 2865754 . . . gene_id "XLOC_008285"; transcript_id "TCONS_00014263"; exon_number "1"; oId "CUFF.311.1"; class_code "u"; tss_id "TSS9989"; 
Chr1 Cufflinks exon 5280222 5281681 . . . gene_id "XLOC_008286"; transcript_id "TCONS_00014264"; exon_number "1"; oId "CUFF.522.1"; class_code "u"; tss_id "TSS9990"; 
Chr1 Cufflinks exon 5325454 5325814 . . . gene_id "XLOC_008287"; transcript_id "TCONS_00014265"; exon_number "1"; oId "CUFF.528.1"; class_code "u"; tss_id "TSS9991"; 
Chr1 Cufflinks exon 5325939 5326211 . . . gene_id "XLOC_008288"; transcript_id "TCONS_00014266"; exon_number "1"; oId "CUFF.529.1"; class_code "u"; tss_id "TSS9992"; 
Chr1 Cufflinks exon 5733388 5733795 . . . gene_id "XLOC_008289"; transcript_id "TCONS_00014267"; exon_number "1"; oId "CUFF.578.1"; class_code "u"; tss_id "TSS9993"; 
Chr1 Cufflinks exon 5970769 5970971 . . . gene_id "XLOC_008290"; transcript_id "TCONS_00014268"; exon_number "1"; oId "CUFF.602.1"; class_code "u"; tss_id "TSS9994"; 
Chr1 Cufflinks exon 6140629 6141565 . . . gene_id "XLOC_008291"; transcript_id "TCONS_00014269"; exon_number "1"; oId "CUFF.618.1"; class_code "u"; tss_id "TSS9995"; 

같은 dataframe이 내가 +.을 가지고 7 컬럼을 교체합니다. 내가 awk를 사용할 때 어떻게의 형식을 보존 할 내가 원하는 것을 얻고 있지만, 데이터 형식을

Chr1 Cufflinks exon 768419 769441 . + . gene_id "XLOC_008282"; transcript_id "TCONS_00014260"; exon_number "1"; oId "CUFF.87.1"; class_code "u"; tss_id "TSS9986"; 
Chr1 Cufflinks exon 1519538 1520185 . + . gene_id "XLOC_008283"; transcript_id "TCONS_00014261"; exon_number "1"; oId "CUFF.169.1"; class_code "u"; tss_id "TSS9987"; 
Chr1 Cufflinks exon 1888251 1888965 . + . gene_id "XLOC_008284"; transcript_id "TCONS_00014262"; exon_number "1"; oId "CUFF.206.1"; class_code "u"; tss_id "TSS9988"; 
Chr1 Cufflinks exon 2865389 2865754 . + . gene_id "XLOC_008285"; transcript_id "TCONS_00014263"; exon_number "1"; oId "CUFF.311.1"; class_code "u"; tss_id "TSS9989"; 
Chr1 Cufflinks exon 5280222 5281681 . + . gene_id "XLOC_008286"; transcript_id "TCONS_00014264"; exon_number "1"; oId "CUFF.522.1"; class_code "u"; tss_id "TSS9990"; 
Chr1 Cufflinks exon 5325454 5325814 . + . gene_id "XLOC_008287"; transcript_id "TCONS_00014265"; exon_number "1"; oId "CUFF.528.1"; class_code "u"; tss_id "TSS9991"; 
Chr1 Cufflinks exon 5325939 5326211 . + . gene_id "XLOC_008288"; transcript_id "TCONS_00014266"; exon_number "1"; oId "CUFF.529.1"; class_code "u"; tss_id "TSS9992"; 
Chr1 Cufflinks exon 5733388 5733795 . + . gene_id "XLOC_008289"; transcript_id "TCONS_00014267"; exon_number "1"; oId "CUFF.578.1"; class_code "u"; tss_id "TSS9993"; 
Chr1 Cufflinks exon 5970769 5970971 . + . gene_id "XLOC_008290"; transcript_id "TCONS_00014268"; exon_number "1"; oId "CUFF.602.1"; class_code "u"; tss_id "TSS9994"; 

unstranded_clean.gtf

AWK '$ 7 = "+"'변경 내 데이터?

답변

2

awk에서 기본 출력 필드 구분 기호는 공백입니다. 나는 당신의 입력 데이터가 필드 구분자로서 탭을 가지고 있다고 생각한다. 단지 탭 입력 및 출력 필드 세퍼레이터로서 사용되었는지 확인하기 위해 시도 :

awk -F'\t' '{$7="+"} 1' OFS='\t' unstranded_clean.gtf 

OFS='\t' 출력 필드 구분자를 설정한다. 당신이 정말로 (공백과 탭의 다양한 수의) 모든 공백을 유지하고 싶었다면

+0

우수함. 그것은 효과가 있었다. '1'이 사용 된 이유를 제게 설명해 주시겠습니까? – upendra

+1

@upendra 스타일의 문제입니다. 스크립트를 작성할 때'{$ 7 = "+"}'는 필드 7을'+ '로 설정하는 명령이고'1 '은'1 '이 참으로 평가되기 때문에 awk가 그 행을 인쇄하도록하는 조건입니다. 'awk -F'\ t "$ 7 ="+ " 'OFS ='\ t'' 형식은 '$ 7 = 1'이후에 모두 작동합니다. 필드 7과 필드 9를 모두 true로 평가하는 조건으로 사용합니다 (따라서 인쇄를 유발합니다) . – John1024

+1

자세한 설명을 주셔서 감사합니다. – upendra

0

, 당신은 내부 필드 분리 메커니즘을 사용할 수 없습니다 - 당신은 그것을 직접 수행해야합니다

BEGIN { 
    ONEFLD="[^ \t]+[ \t]+"  # pattern to match a field and following white space 
    for (i = 1; i < 7; i++) 
     LHSPAT = LHSPAT ONEFLD 
} 
{ 
    if (match($0, LHSPAT) { 
     lhs = substr($0, RSTART, RLENGTH) 
     rem = substr($0, RLENGTH + 1) 
    } 
    if (match(rem, ONEFLD)) { 
     field7 = substr(rem, RSTART, RLENGTH) 
     sub(/[^ \t]+/, "+", field7) 
     rhs = substr(rem, RLENGTH + 1) 
    } 
    print lhs field7 rhs 
}