
2つのファイルがあります。
文書サンプル
>> AT5G46880.1|PACid:19669936
# score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc
--- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ----
1 ! 276.3 0.7 5.9e-85 3.8e-82 1 231 [] 317 555 .. 317 555 .. 0.96
Alignments for each domain:
== domain 1 score: 276.3 bits; conditional E-value: 5.9e-85
MSA_At_Os_START 1 dkslllelaleameeLlslaeeeeplWvksmdkk..pgkeslnleeylrlFeela...kkpegykseasravgvVemdpealv 78
+k + +e a+++++eL +++++eeplW+k+ ++k + +ln eey+rlF++ + +++ ++ eas+a++vV+m++++lv
AT5G46880.1|PACid:19669936 317 EKVIAMEFAVSCVQELTKMCDTEEPLWIKKKSDKigGEILCLNEEEYMRLFPWPMenqNNKGDFLREASKANAVVIMNSITLV 399
57899***************************99744445**************9999888999******************* PP
MSA_At_Os_START 79 eilmddelanrwdelfpsiv.kastlevistgaag.ngtlelmqaelqvlsplvpaRevvflRyckq.ledgtwvvvdvsldh 158
+ +++ a++w+e+f+siv +a+t+++is+g++g +g+l+lm+aelqvlsplvp+Re +flRy++q +e g w++vd+++d+
AT5G46880.1|PACid:19669936 400 DAFLN---ADKWSEMFCSIVaRAKTVQIISSGVSGaSGSLLLMFAELQVLSPLVPTREAYFLRYVEQnAETGNWAIVDFPIDS 479
*****...***********************************************************7889**********99 PP
MSA_At_Os_START 159 knrgp...kskyvrvrllpSGclIqdlengyskvtwVeHlevdewsvkelyrpllrsglalgakrwvatLrrqcer 231
+ + ++ ++++++pSGc+Iqd++ngys+v wVeH+evde++v+e++ ++++sg+a+ga+rw+ L+rqcer
AT5G46880.1|PACid:19669936 480 FHDQMqpmNTITHEYKRKPSGCIIQDMPNGYSQVKWVEHVEVDEKHVHETFAEYVKSGMAFGANRWLDVLQRQCER 555
8777777799****************************************************************97 PP
>> AT1G73360.1|PACid:19649192
# score bias c-Evalue i-Evalue hmmfrom hmm to alifrom ali to envfrom env to acc
--- ------ ----- --------- --------- ------- ------- ------- ------- ------- ------- ----
1 ! 270.5 0.1 3.4e-83 2.2e-80 1 231 [] 230 457 .. 230 457 .. 0.98
2 ? 1.9 0.0 0.43 2.8e+02 73 95 .. 544 566 .. 511 654 .. 0.79
Alignments for each domain:
== domain 1 score: 270.5 bits; conditional E-value: 3.4e-83
MSA_At_Os_START 1 dkslllelaleameeLlslaeeeeplWvksmdkkpgkeslnleeylrlFeela..kkpegykseasravgvVemdpealveil 81
dk++++ +al+ameeLl+l++++eplW+++ +++ ++lnl +y+++F++ +k++++++easr++g+V m+++alv+++
AT1G73360.1|PACid:19649192 230 DKPIMTGIALTAMEELLRLLQTNEPLWTRTDGCR---DILNLGSYENVFPRSSnrGKNQNFRVEASRSSGIVFMNAMALVDMF 309
7999***************************986...9***************99999************************* PP
MSA_At_Os_START 82 mddelanrwdelfpsiv.kastlevistgaag..ngtlelmqaelqvlsplvpaRevvflRyckqledgtwvvvdvsldhknr 161
md +w elfpsi+ ++tl vis+g++g +g+l+l+++e++vlsplv +Re++ lRyc+q e+g+w+vv+vs+d ++
AT1G73360.1|PACid:19649192 310 MD---CVKWTELFPSIIaASKTLAVISSGMGGthEGALHLLYEEMEVLSPLVATREFCELRYCQQTEQGSWIVVNVSYDLPQ- 388
**...9*************************************************************************887. PP
MSA_At_Os_START 162 gpkskyvrvrllpSGclIqdlengyskvtwVeHlevd.ewsvkelyrpllrsglalgakrwvatLrrqcer 231
+ ++ ++pSGclIqd++ngyskvtwVeH+e + ++ v+elyr+++++g+a+ga rwv+tL+r+cer
AT1G73360.1|PACid:19649192 389 --FVSHSQSYRFPSGCLIQDMPNGYSKVTWVEHIETEeKELVHELYREIIHRGIAFGADRWVTTLQRMCER 457
..56999******************************888*****************************97 PP
== domain 2 score: 1.9 bits; conditional E-value: 0.43
MSA_At_Os_START 73 dpealveilmddelanrwdelfp 95
+p++++++l+d+ ++ +wd l
AT1G73360.1|PACid:19649192 544 SPQNVFNFLKDERTRPQWDVLSN 566
3899*******667899*97654 PP
ファイルBのサンプル
AT5G46880.1
AT5G27818.1
AT5G77690.1
この場合、必要な出力は次のようになります。
AT5G46880.1 317 555
列7と8のIDと値、つまりalifromとali toを表示する必要があります。
ファイルAとBは提供された例よりはるかに大きいです。私が望むのは、ファイルBからAまでのすべてのID行を一致させ、ファイルA(後のID)に一致するものがある場合は、IDと列の>>
値を新しいファイルに印刷することです。各フィールドの照合は必要ありません。alifrom
alito
>>
まず、ファイルAから不要なデータを削除し、最初の5行をから保存してから比較しようAlignments for each domain
としました。しかし、どのように進むべきかわかりません。
注:ファイルAはタブ区切りではありません。
答え1
その後awk
の手順で:
awk '
BEGIN { FS = "([[:space:]]+|[|])" }
NR==FNR { id[$1] ; next }
/^>>/ && $2 in id { data = $2 ; f = 1 }
f && /^[0-9]/ { data = data " : " $10 " " $11 }
f && !NF { f = 0 ; print data }
' FileB FileA
以下の結果が出力されます。
AT5G46880.1 : 317 555
AT1G73360.1 : 230 457 : 544 566
注:複数の属性行の処理方法を確認できるように、FileBに2番目のIDを追加しました。
プログラムawk
の仕組み:
BEGIN
- 後で「>>」で始まる行からIDに簡単にアクセスできるようにフィールド区切り文字を定義します。
NR==FNR
- IDが保存された最初のファイルを読み取るときに正しいモードです。
/^>>/ && $2 in id
- IDと行を一致させ、見つかったIDが最初のファイルに記憶されていることを確認します。出力用のIDを保存し、処理フラグを設定します。
f && /^[0-9]/
- フラグが設定され、数字で始まる行が一致すると、対応するフィールド10と11が出力データに追加されます(コロンで区切られます)。
f && !NF
- フラグがセットされ、空の行が見つかると、ブロックが処理され、フラグがクリアされます。
答え2
この試み
grep -A4 -f <(sed 's/^/^>> /' fileB) fileA |
sed -r '/^>>/! s/(\S+\s+){8}((\S+\s+){3}).*/\2/
s/[][>.-]*\s*//'