首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux -在一个文件中搜索文本并加入另一个文件

Linux -在一个文件中搜索文本并加入另一个文件
EN

Stack Overflow用户
提问于 2016-05-14 04:09:46
回答 1查看 46关注 0票数 2

我有两个文本文件:

File-1

代码语言:javascript
复制
PRKCZ
TNFRSF14
PRDM16
MTHFR  

File-2(包含两个制表符分隔的列):

代码语言:javascript
复制
atherosclerosis   GRAB1|PRKCZ|TTN
cardiomyopathy,hypercholesterolemia    PRKCZ|MTHFR
Pulmonary arterial hypertension,arrhythmia   PRDM16|APOE|GATA4  

现在,对于File-1中的每个名称,还要打印匹配的File-2中相应的疾病名称。因此,输出将是:

代码语言:javascript
复制
PRKCZ    atherosclerosis,cardiomyopathy,hypercholesterolemia
PRDM16    Pulmonary arterial hypertension,arrhythmia
MTHFR    cardiomyopathy,hypercholesterolemia  

我试过下面的代码:

代码语言:javascript
复制
$ awk '{k=$1}
        NR==FNR{if(NR>1)a[k]=","b"="$1";else{a[k]="";b=$1}next}
        k in a{print $0a[k]}' File1 File2

但是我没有得到想要的输出。有谁能纠正/帮助我吗?

EN

回答 1

Stack Overflow用户

发布于 2016-05-14 04:30:40

您可以使用以下awk脚本执行此操作:

script.awk

代码语言:javascript
复制
BEGIN { FS="[\t]" }
NR==FNR { split($2, tmp, "|")
          for( ind in tmp ) {
            name = tmp[ ind ]
            if (name in disease) { disease[ name ] = disease[ name ] "," $1 }
            else { disease[ name ] = $1 }
          }
          next
        }

        { if( $1 in disease) print $1, disease[ $1 ] }

像这样使用它(注意第一个File-2)。

说明:

当为第一个参数( separator.

  • the )执行BEGIN块时,NR == FNR块设置选项卡(File-2):它读取带有名称的疾病,拆分名称,然后将疾病附加到字典中的每个名称下
  • 第二个参数(File-1)仅执行最后一个块(由于前一个块中的next ):它输出存储在名称(取自separator.
  • the)下的疾病
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37218609

复制
相关文章

相似问题

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