首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不改变数据格式的情况下用awk替换列

如何在不改变数据格式的情况下用awk替换列
EN

Stack Overflow用户
提问于 2017-10-24 22:40:18
回答 2查看 286关注 0票数 2

我有这样的数据

代码语言:javascript
复制
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";

我想用.取代第7列的+。当我使用awk时,我得到了我想要的东西,但它改变了数据格式

awk‘$7=“+’unstranded_clean.gtf

代码语言:javascript
复制
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";

如何保存数据的格式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-24 22:54:19

在awk中,默认的输出字段分隔符为空。我猜您的输入数据有选项卡作为字段分隔符。为了确保输入和输出中只使用一个制表符作为字段分隔符,请尝试:

代码语言:javascript
复制
awk -F'\t' '{$7="+"} 1' OFS='\t' unstranded_clean.gtf

OFS='\t'设置输出字段分隔符。

票数 2
EN

Stack Overflow用户

发布于 2017-10-24 23:12:54

如果您确实希望保留所有空白(不同数量的空格和制表符),则不能使用内部字段拆分机制--您需要自己做:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46921097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档