完全な段落を取得するには、ファイルの行を他のファイルのヘッダーと一致させます。

完全な段落を取得するには、ファイルの行を他のファイルのヘッダーと一致させます。

2つのファイルを使用してスクリプトを作成するのに役立ちます。ファイル1はアミノ酸を特定の順序でリストし(1つは異なる順序で、繰り返すことができます)、2番目のファイル2は各アミノ酸の下にリストされている機能を構成します。ここでは、リスト1(ファイル1)のアミノ酸を一致させて、2番目のファイル(ファイル2)の同じアミノ酸の下に特性をリストし、それをファイル1で述べたのと同じ順序で出力ファイルにコピーしようとしています。 。

たとえば、ファイル1.txt

    Threonine
    Glutamine
    Alanine
    Asparatate
    Glutamine
    Alanine
    Threonine

ファイル2.txt

    [ Alanine ] 
    89.1    13.7    -3.12   -10.09
    [ Asparatate ]  
    133.1   30  -2.43   -10.35
    [ Glutamine ]   
    146.1   42.7    -3.46   -10.23
    [ Threonine ]   
    119.1   28.5    -2.43   -9.99   

私が望む出力は次のとおりです:output.txt

    [ Threonine ]   
    119.1   28.5    -2.43   -9.99
    [ Glutamine ]   
    146.1   42.7    -3.46   -10.23
    [ Alanine ] 
    89.1    13.7    -3.12   -10.09
    [ Asparatate ]  
    133.1   30  -2.43   -10.35
    [ Glutamine ]   
    146.1   42.7    -3.46   -10.23
    [ Alanine ] 
    89.1    13.7    -3.12   -10.09 
    [ Threonine ]   
    119.1   28.5    -2.43   -9.99

単語の代わりに数字をインデックスとして使用するawkで次のスクリプトを試しましたが、この目的では機能しません。

awk 'FNR==NR { a[ "\\[ " $1 " \\]" ]; next } /^\[/ { f=0 } { for (i in a) if ($0 ~ i) f=1 } f' file1.txt file2.txt > output.txt

言葉に合うようにスクリプトを変更する方法がわかりません。どこに間違っているのか教えて、スクリプトを実行して目的の結果を得るのに役立ちます。

ご協力ありがとうございます。

よろしくお願いします。

アシャ

ベストアンサー1

acidを繰り返しFile1.txt+ 1行で一致するすべての行を見つける必要がありますFile2.txt。これは簡単に行えます。grep

for acid in $(sed 's/^\s*//' File1.txt)
do
    grep -FA1 "$acid" File2.txt
done > Output.txt

しかし、あなたが望むならawk

awk '
FNR!=NR{
    print "    [",$1,"]"
    print acids[$1]
    next
}
/\[/{
    acid=$2
    next
}
{
    acids[acid]=$0
}' File2.txt File1.txt > Output.txt

おすすめ記事