2つのリスト間の厳しいgrep

2つのリスト間の厳しいgrep

2つの異なるtxtファイルがあります。 「all_E3.txt」という最初の項目にはオブジェクトのリスト(列)が含まれ、そのリストには重複したオブジェクトもたくさんあります。 「UPS.txt」という別のファイルには、列にオブジェクトのリストがあり(重複なし)、各オブジェクトは変数(同じ行とは異なる列、数字、または「NA」)に関連付けられています。

このファイルには、「all_E3.txt」ファイルにもオブジェクトがあります(ただしこれに限定されません)。 「ALL_E3.txt」にあるすべてのオブジェクトと、「UPS.txt」に応じた対応する変数を含む「output_UPS.txt」という別のファイルをインポートしたいと思います。たとえば、

  • ファイル "all_E3.txt":
    AMFR
    AMFR
    AMFR
    ANAPC11
    CRB
    CRB
    TER
    CAM
    DVDE
    
  • ファイル2「UPS.txt」
    AMFR 0
    REF 1
    SDRF N.A.
    BHU 3 
    ANAPC11 2
    CRB 2
    YUT 1
    TER 0
    CAM 3
    WERS N.A.
    DVDE 3
    
  • ファイル出力 "output_UPS.txt"
    AMFR 0
    AMFR 0
    AMFR 0
    ANAPC11 2
    CRB 2
    CRB 2
    TER 0
    CAM 3
    DVDE 3
    

他の組織のファイルを使用する同様の設定で、友達のアドバイスに従って次のことを試しました。

for name in ????_?
do
   for file in $name/Pocket_???_$name\.pdb_OUTPUT.txt
   do
      grep -H Exposed $file | uniq
   done
done 

しかし、現在の状況に適応することはできません。オペレーティングシステムはCentOS 7です。

誰でも私を助けることができますか?ありがとうございます。

答え1

awk有効な代替案であれば、grep次のことが機能します。

awk 'NR==FNR{a[$1]=$2} NR>FNR{print $1,a[$1]}' UPS.txt all_E3.txt > output_UPS.txt
  • 次に、最初の列と2番目の列の間のマッピングを読み取り、作成しますUPS.txta
  • 処理が次のファイルに達するとall_E3.txtNRグローバル行カウンターがFNRファイル別の行カウンターとは異なる)、そのファイルの「最初の列」と以前に作成されたマップの関連値が出力されます。 2列。

出力はにリダイレクトされますoutput_UPS.txt

関連情報