2016-05-13 158 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
相關問題