繁体   English   中英

通过保留 bash 中的第一行来删除与特定模式匹配的所有行

[英]Deleting all lines matching a specific pattern by retaining the first line in bash

我想通过删除除第一行匹配模式“FAT1”之外的所有行并修改坐标(第 3 列和第 4 列)来编辑 gtf 文件。

#!genome-build GRCh38.p7
#!genome-version GRCh38
#!genome-date 2013-12
#!genome-build-accession NCBI:GCA_000001405.22
#!genebuild-last-updated 2016-06
1       havana  exon    137682  137965 gene_id "ENSG00000239906"; gene_version "1"; gene_name "RP11-34P13.16"; gene_source "havana";
1       havana  gene    139790  140339  gene_id "ENSG00000239906"; gene_version "1"; gene_name "RP11-34P13.14"; gene_source "havana"; 
1       havana  exon    140001  140101 gene_id "ENSG00000269981"; gene_version "1"; gene_name "FAT1"; gene_source "havana";
1       havana  gene    143401  145401  gene_id "ENSG00000269981"; gene_version "1"; gene_name "FAT1"; gene_source "havana"; 

预计 output

#!genome-build GRCh38.p7
#!genome-version GRCh38
#!genome-date 2013-12
#!genome-build-accession NCBI:GCA_000001405.22
#!genebuild-last-updated 2016-06
1       havana  exon    137682  137965 gene_id "ENSG00000239906"; gene_version "1"; gene_name "RP11-34P13.16"; gene_source "havana";
1       havana  gene    139790  140339  gene_id "ENSG00000239906"; gene_version "1"; gene_name "RP11-34P13.14"; gene_source "havana"; 
1       havana  exon    147653  148000 gene_id "ENSG00000269981"; gene_version "1"; gene_name "FAT1"; gene_source "havana";

我试过这样的事情。

    # Keep only the unique entry for FAT1 gene. 
    awk '/"ENSG00000269981"/&&c++ {next} 1' ref.gtf > ref_edit.gtf 

   #then manually edit the coordinates in vim editor

但我相信会有更合理的解决方案。

请您尝试以下操作。

awk -v new_fourth_col="147653" -v new_fifth_col="148000" '
BEGIN{
  OFS="\t"
}
/gene_name "FAT1"/{
  if(++count==1){
    $4=new_fourth_col
    $5=new_fifth_col
    print
  }
  next
}
{
  $1=$1
  print
}
' Input_file

此外,我已将您的 output 设为制表符分隔。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM