2016-05-13 112 views
2

我有两个文本文件:Linux的 - 在一个文件中搜索文本,并加入另一个文件

File-1

PRKCZ 
TNFRSF14 
PRDM16 
MTHFR 

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

atherosclerosis GRAB1|PRKCZ|TTN 
cardiomyopathy,hypercholesterolemia PRKCZ|MTHFR 
Pulmonary arterial hypertension,arrhythmia PRDM16|APOE|GATA4 

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

PRKCZ atherosclerosis,cardiomyopathy,hypercholesterolemia 
PRDM16 Pulmonary arterial hypertension,arrhythmia 
MTHFR cardiomyopathy,hypercholesterolemia 

我已经试过代码:

$ 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 

,但我获得所需的输出。任何人都可以纠正/帮助请。

回答

3

您可以用下面的awk脚本做到这一点:

script.awk

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 ] } 

使用方法如下awk -f script.awk File-2 File-1(注意:第一File-2)。

说明:

  • BEGIN块设置选项卡作为分隔符。
  • NR == FNR块是一个用于第一个参数(File-2)执行:它读取与所述名称的疾病,分裂的名称,然后在每个
  • 最后块时,才执行所述名称的疾病追加到一个字典(由于第二个参数(File-1)中的next):它输出存储在名称下的疾病(取自$1
相关问题