2016-05-13 4 views
2

に参加し、私は2つのテキストファイルがあります。のLinux - ファイル内の検索テキストと別のファイルに

File-1

PRKCZ 
TNFRSF14 
PRDM16 
MTHFR 

File-2(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スクリプトでこれを行うことができます:

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

script.awkこのawk -f script.awk File-2 File-1(最初File-2に注意してください)のようにそれを使用してください。

説明:

    BEGIN
  • ブロックがセパレータとしてタブを設定します。
  • NR == FNRブロックが最初の引数(File-2)に対して実行される:それは、名前の疾患を読み取る名前を分割した後(最後のブロックのみが実行される
  • 名のそれぞれの下に辞書に疾患を追加します前のブロックのnextのために)第2引数(File-1)のために保存されます:$1から取られた
関連する問題