以下のように何千ものファイル(例:EOG090W06LO_M0_mlc)があり、このファイルから特定のデータを抽出したいと思います。
lnL kappa (ts/tv) omega (dN/dS) tree length for dN tree length for dS
EOG090W06LO -5160.995083 1.50195 0.05318 0.6637 12.4810
EOG090W05ZG ...... ....... ...... ....... ........
EOG090W06CS ...... ....... ...... ....... ........
BashやPythonでこれを行う方法を案内してください。
サンプルファイルEOG090W06LO_M0_mlc
> Codon frequencies under model, for use in evolver (TTT TTC TTA TTG ...
> GGG):
> 0.01286657 0.01332375 0.01120763 0.01409444
> 0.00654743 0.00678008 0.00570324 0.00717226
> 0.01087585 0.01126231 0.00000000 0.00000000
> 0.00570731 0.00591011 0.00497145 0.00625197
> 0.01541211 0.01595975 0.01342496 0.01688291
> 0.00784278 0.00812146 0.00683158 0.00859123
> 0.01302755 0.01349046 0.01134786 0.01427079
> 0.00683646 0.00707938 0.00595501 0.00748887
> 0.02626538 0.02719867 0.02287888 0.02877192
> 0.01336570 0.01384063 0.01164241 0.01464121
> 0.02220161 0.02299050 0.01933907 0.02432034
> 0.01165072 0.01206470 0.01014854 0.01276256
> 0.03667897 0.03798228 0.03194980 0.04017930
> 0.01866488 0.01932810 0.01625834 0.02044610
> 0.03100401 0.03210568 0.02700654 0.03396277
> 0.01626995 0.01684807 0.01417220 0.01782261
>
>
> TREE # 1: (15, 43, (((((1, (((((10, (12, 6)), ((((11, 3), 13), 5),
> 8)), (7, 9)), (14, 4)), 2)), 44), ((19, 24), ((21, 22), (47, 48)))),
> ((((((((16, 18), 17), 54), 20), (((((((26, 32), 51), (33, 53)), 29),
> ((27, 34), ((28, 31), 30))), 50), 35)), ((((36, (39, 40)), (38, 41)),
> 37), ((42, (45, 46)), 52))), 49), 25)), 23)); MP score: 1153
> lnL(ntime: 0 np: 2): -5160.995083 +0.000000
> 1.501953 0.053177
>
> tree length = 11.795207
>
> (15: 0.475705, 43: 0.645809, (((((1: 0.206782, (((((10: 0.069332, (12:
> 0.046579, 6: 0.054610): 0.024700): 0.084846, ((((11: 0.011270, 3: 0.006663): 0.009598, 13: 0.006096): 0.062727, 5: 0.096529): 0.014611, 8: 0.101040): 0.032842): 0.041200, (7: 0.057180, 9: 0.084448):
> 0.062359): 0.047267, (14: 0.103211, 4: 0.090685): 0.077973): 0.064394, 2: 0.181198): 0.243921): 0.270070, 44: 0.295151): 0.134002, ((19:
> 0.391130, 24: 0.180895): 0.089913, ((21: 0.075882, 22: 0.052405): 0.142810, (47: 0.360326, 48: 0.151256): 0.061099): 0.073893): 0.186753): 0.035225, ((((((((16: 0.021929, 18: 0.021001): 0.022963, 17: 0.036132): 0.034858, 54: 0.055961): 0.084331, 20: 0.138317):
> 0.140076, (((((((26: 0.148166, 32: 0.104747): 0.033408, 51: 0.164604): 0.029923, (33: 0.190488, 53: 0.174541): 0.030186): 0.019935, 29: 0.222916): 0.020484, ((27: 0.050592, 34: 0.061516): 0.092558, ((28: 0.074252, 31: 0.108120): 0.020924, 30: 0.061404): 0.114540): 0.109270): 0.097724, 50: 0.202292): 0.206280, 35: 0.296817): 0.083934): 0.055128, ((((36: 0.026483, (39: 0.027394, 40: 0.011871): 0.003734): 0.010522, (38: 0.015286, 41: 0.013052): 0.022506): 0.062251, 37: 0.074776): 0.179134, ((42: 0.088283, (45: 0.133738, 46: 0.088861): 0.020813): 0.076282, 52: 0.230076): 0.048498): 0.051390): 0.167347, 49: 0.395711): 0.061789, 25: 0.377871): 0.036416): 0.064064, 23: 0.514741): 0.157612);
>
> (taxon15: 0.475705, taxon43: 0.645809, (((((taxon1: 0.206782,
> (((((taxon10: 0.069332, (taxon12: 0.046579, taxon6: 0.054610):
> 0.024700): 0.084846, ((((taxon11: 0.011270, taxon3: 0.006663): 0.009598, taxon13: 0.006096): 0.062727, taxon5: 0.096529): 0.014611, taxon8: 0.101040): 0.032842): 0.041200, (taxon7: 0.057180, taxon9:
> 0.084448): 0.062359): 0.047267, (taxon14: 0.103211, taxon4: 0.090685): 0.077973): 0.064394, taxon2: 0.181198): 0.243921): 0.270070, taxon44: 0.295151): 0.134002, ((taxon19: 0.391130, taxon24: 0.180895): 0.089913, ((taxon21: 0.075882, taxon22: 0.052405): 0.142810, (taxon47: 0.360326, taxon48: 0.151256): 0.061099): 0.073893): 0.186753): 0.035225, ((((((((taxon16: 0.021929, taxon18: 0.021001): 0.022963, taxon17: 0.036132): 0.034858, taxon54: 0.055961): 0.084331, taxon20:
> 0.138317): 0.140076, (((((((taxon26: 0.148166, taxon32: 0.104747): 0.033408, taxon51: 0.164604): 0.029923, (taxon33: 0.190488, taxon53: 0.174541): 0.030186): 0.019935, taxon29: 0.222916): 0.020484, ((taxon27: 0.050592, taxon34: 0.061516): 0.092558, ((taxon28:
> 0.074252, taxon31: 0.108120): 0.020924, taxon30: 0.061404): 0.114540): 0.109270): 0.097724, taxon50: 0.202292): 0.206280, taxon35: 0.296817): 0.083934): 0.055128, ((((taxon36: 0.026483, (taxon39: 0.027394, taxon40: 0.011871): 0.003734): 0.010522, (taxon38: 0.015286, taxon41:
> 0.013052): 0.022506): 0.062251, taxon37: 0.074776): 0.179134, ((taxon42: 0.088283, (taxon45: 0.133738, taxon46: 0.088861):
> 0.020813): 0.076282, taxon52: 0.230076): 0.048498): 0.051390): 0.167347, taxon49: 0.395711): 0.061789, taxon25: 0.377871): 0.036416): 0.064064, taxon23: 0.514741): 0.157612);
>
> Detailed output identifying parameters
>
> kappa (ts/tv) = 1.50195
>
> omega (dN/dS) = 0.05318
>
> dN & dS for each branch
>
> branch t N S dN/dS dN dS N*dN S*dS
>
> 55..15 0.476 158.4 60.6 0.0532 0.0268 0.5034 4.2 30.5
> 55..43 0.646 158.4 60.6 0.0532 0.0363 0.6834 5.8 41.4
> 55..56 0.158 158.4 60.6 0.0532 0.0089 0.1668 1.4 10.1
> 56..57 0.064 158.4 60.6 0.0532 0.0036 0.0678 0.6 4.1
> 57..58 0.035 158.4 60.6 0.0532 0.0020 0.0373 0.3 2.3
> 58..59 0.134 158.4 60.6 0.0532 0.0075 0.1418 1.2 8.6
> 59..60 0.270 158.4 60.6 0.0532 0.0152 0.2858 2.4 17.3
> 60..1 0.207 158.4 60.6 0.0532 0.0116 0.2188 1.8 13.3
> 60..61 0.244 158.4 60.6 0.0532 0.0137 0.2581 2.2 15.6
> 61..62 0.064 158.4 60.6 0.0532 0.0036 0.0681 0.6 4.1
> 62..63 0.047 158.4 60.6 0.0532 0.0027 0.0500 0.4 3.0
> 63..64 0.041 158.4 60.6 0.0532 0.0023 0.0436 0.4 2.6
> 64..65 0.085 158.4 60.6 0.0532 0.0048 0.0898 0.8 5.4
> 65..10 0.069 158.4 60.6 0.0532 0.0039 0.0734 0.6 4.4
> 65..66 0.025 158.4 60.6 0.0532 0.0014 0.0261 0.2 1.6
> 66..12 0.047 158.4 60.6 0.0532 0.0026 0.0493 0.4 3.0
> 66..6 0.055 158.4 60.6 0.0532 0.0031 0.0578 0.5 3.5
> 64..67 0.033 158.4 60.6 0.0532 0.0018 0.0348 0.3 2.1
> 67..68 0.015 158.4 60.6 0.0532 0.0008 0.0155 0.1 0.9
> 68..69 0.063 158.4 60.6 0.0532 0.0035 0.0664 0.6 4.0
> 69..70 0.010 158.4 60.6 0.0532 0.0005 0.0102 0.1 0.6
> 70..11 0.011 158.4 60.6 0.0532 0.0006 0.0119 0.1 0.7
> 70..3 0.007 158.4 60.6 0.0532 0.0004 0.0071 0.1 0.4
> 69..13 0.006 158.4 60.6 0.0532 0.0003 0.0065 0.1 0.4
> 68..5 0.097 158.4 60.6 0.0532 0.0054 0.1021 0.9 6.2
> 67..8 0.101 158.4 60.6 0.0532 0.0057 0.1069 0.9 6.5
> 63..71 0.062 158.4 60.6 0.0532 0.0035 0.0660 0.6 4.0
> 71..7 0.057 158.4 60.6 0.0532 0.0032 0.0605 0.5 3.7
> 71..9 0.084 158.4 60.6 0.0532 0.0048 0.0894 0.8 5.4
> 62..72 0.078 158.4 60.6 0.0532 0.0044 0.0825 0.7 5.0
> 72..14 0.103 158.4 60.6 0.0532 0.0058 0.1092 0.9 6.6
> 72..4 0.091 158.4 60.6 0.0532 0.0051 0.0960 0.8 5.8
> 61..2 0.181 158.4 60.6 0.0532 0.0102 0.1917 1.6 11.6
> 59..44 0.295 158.4 60.6 0.0532 0.0166 0.3123 2.6 18.9
> 58..73 0.187 158.4 60.6 0.0532 0.0105 0.1976 1.7 12.0
> 73..74 0.090 158.4 60.6 0.0532 0.0051 0.0951 0.8 5.8
> 74..19 0.391 158.4 60.6 0.0532 0.0220 0.4139 3.5 25.1
> 74..24 0.181 158.4 60.6 0.0532 0.0102 0.1914 1.6 11.6
> 73..75 0.074 158.4 60.6 0.0532 0.0042 0.0782 0.7 4.7
> 75..76 0.143 158.4 60.6 0.0532 0.0080 0.1511 1.3 9.2
> 76..21 0.076 158.4 60.6 0.0532 0.0043 0.0803 0.7 4.9
> 76..22 0.052 158.4 60.6 0.0532 0.0029 0.0555 0.5 3.4
> 75..77 0.061 158.4 60.6 0.0532 0.0034 0.0647 0.5 3.9
> 77..47 0.360 158.4 60.6 0.0532 0.0203 0.3813 3.2 23.1
> 77..48 0.151 158.4 60.6 0.0532 0.0085 0.1601 1.3 9.7
> 57..78 0.036 158.4 60.6 0.0532 0.0020 0.0385 0.3 2.3
> 78..79 0.062 158.4 60.6 0.0532 0.0035 0.0654 0.6 4.0
> 79..80 0.167 158.4 60.6 0.0532 0.0094 0.1771 1.5 10.7
> 80..81 0.055 158.4 60.6 0.0532 0.0031 0.0583 0.5 3.5
> 81..82 0.140 158.4 60.6 0.0532 0.0079 0.1482 1.2 9.0
> 82..83 0.084 158.4 60.6 0.0532 0.0047 0.0892 0.8 5.4
> 83..84 0.035 158.4 60.6 0.0532 0.0020 0.0369 0.3 2.2
> 84..85 0.023 158.4 60.6 0.0532 0.0013 0.0243 0.2 1.5
> 85..16 0.022 158.4 60.6 0.0532 0.0012 0.0232 0.2 1.4
> 85..18 0.021 158.4 60.6 0.0532 0.0012 0.0222 0.2 1.3
> 84..17 0.036 158.4 60.6 0.0532 0.0020 0.0382 0.3 2.3
> 83..54 0.056 158.4 60.6 0.0532 0.0031 0.0592 0.5 3.6
> 82..20 0.138 158.4 60.6 0.0532 0.0078 0.1464 1.2 8.9
> 81..86 0.084 158.4 60.6 0.0532 0.0047 0.0888 0.7 5.4
> 86..87 0.206 158.4 60.6 0.0532 0.0116 0.2183 1.8 13.2
> 87..88 0.098 158.4 60.6 0.0532 0.0055 0.1034 0.9 6.3
> 88..89 0.020 158.4 60.6 0.0532 0.0012 0.0217 0.2 1.3
> 89..90 0.020 158.4 60.6 0.0532 0.0011 0.0211 0.2 1.3
> 90..91 0.030 158.4 60.6 0.0532 0.0017 0.0317 0.3 1.9
> 91..92 0.033 158.4 60.6 0.0532 0.0019 0.0354 0.3 2.1
> 92..26 0.148 158.4 60.6 0.0532 0.0083 0.1568 1.3 9.5
> 92..32 0.105 158.4 60.6 0.0532 0.0059 0.1108 0.9 6.7
> 91..51 0.165 158.4 60.6 0.0532 0.0093 0.1742 1.5 10.5
> 90..93 0.030 158.4 60.6 0.0532 0.0017 0.0319 0.3 1.9
> 93..33 0.190 158.4 60.6 0.0532 0.0107 0.2016 1.7 12.2
> 93..53 0.175 158.4 60.6 0.0532 0.0098 0.1847 1.6 11.2
> 89..29 0.223 158.4 60.6 0.0532 0.0125 0.2359 2.0 14.3
> 88..94 0.109 158.4 60.6 0.0532 0.0061 0.1156 1.0 7.0
> 94..95 0.093 158.4 60.6 0.0532 0.0052 0.0979 0.8 5.9
> 95..27 0.051 158.4 60.6 0.0532 0.0028 0.0535 0.5 3.2
> 95..34 0.062 158.4 60.6 0.0532 0.0035 0.0651 0.5 3.9
> 94..96 0.115 158.4 60.6 0.0532 0.0064 0.1212 1.0 7.3
> 96..97 0.021 158.4 60.6 0.0532 0.0012 0.0221 0.2 1.3
> 97..28 0.074 158.4 60.6 0.0532 0.0042 0.0786 0.7 4.8
> 97..31 0.108 158.4 60.6 0.0532 0.0061 0.1144 1.0 6.9
> 96..30 0.061 158.4 60.6 0.0532 0.0035 0.0650 0.5 3.9
> 87..50 0.202 158.4 60.6 0.0532 0.0114 0.2141 1.8 13.0
> 86..35 0.297 158.4 60.6 0.0532 0.0167 0.3141 2.6 19.0
> 80..98 0.051 158.4 60.6 0.0532 0.0029 0.0544 0.5 3.3
> 98..99 0.179 158.4 60.6 0.0532 0.0101 0.1895 1.6 11.5
> 99..100 0.062 158.4 60.6 0.0532 0.0035 0.0659 0.6 4.0
> 100..101 0.011 158.4 60.6 0.0532 0.0006 0.0111 0.1 0.7
> 101..36 0.026 158.4 60.6 0.0532 0.0015 0.0280 0.2 1.7
> 101..102 0.004 158.4 60.6 0.0532 0.0002 0.0040 0.0 0.2
> 102..39 0.027 158.4 60.6 0.0532 0.0015 0.0290 0.2 1.8
> 102..40 0.012 158.4 60.6 0.0532 0.0007 0.0126 0.1 0.8
> 100..103 0.023 158.4 60.6 0.0532 0.0013 0.0238 0.2 1.4
> 103..38 0.015 158.4 60.6 0.0532 0.0009 0.0162 0.1 1.0
> 103..41 0.013 158.4 60.6 0.0532 0.0007 0.0138 0.1 0.8
> 99..37 0.075 158.4 60.6 0.0532 0.0042 0.0791 0.7 4.8
> 98..104 0.048 158.4 60.6 0.0532 0.0027 0.0513 0.4 3.1
> 104..105 0.076 158.4 60.6 0.0532 0.0043 0.0807 0.7 4.9
> 105..42 0.088 158.4 60.6 0.0532 0.0050 0.0934 0.8 5.7
> 105..106 0.021 158.4 60.6 0.0532 0.0012 0.0220 0.2 1.3
> 106..45 0.134 158.4 60.6 0.0532 0.0075 0.1415 1.2 8.6
> 106..46 0.089 158.4 60.6 0.0532 0.0050 0.0940 0.8 5.7
> 104..52 0.230 158.4 60.6 0.0532 0.0129 0.2435 2.1 14.7
> 79..49 0.396 158.4 60.6 0.0532 0.0223 0.4187 3.5 25.4
> 78..25 0.378 158.4 60.6 0.0532 0.0213 0.3998 3.4 24.2
> 56..23 0.515 158.4 60.6 0.0532 0.0290 0.5447 4.6 33.0
>
> tree length for dN: 0.6637 tree length for dS: 12.4810
>
>
> Time used: 0:04
答え1
作業仕様:
(1) 指定されたディレクトリに格納されている多数のファイルからデータを読み込んで収集します。各ファイル名の最初の11文字は一意で、名前の最後の7文字はでなければなりません_M0_mlc
。
(2)ファイルは空白を含むプレーンテキストであり、本質的に自由形式です。
(3)抽出するデータは、リストされている特定のテキストで識別されます。各ファイルに対して最初の一致のみが使用されます。
lnL
kappa
omega
tree length for dN
tree length for dS
同じテキスト行の次の実数が出力値でなければなりません。特定のテキストや値が見つからないファイルの場合は、N / A値を出力する必要があります。
(4)出力は、質問に示すように、各入力ファイルに対して1行ずつ単一のリストでなければなりません。
(5) ファイル内の他のすべてのデータは無視されます。
(6)[タイトルのようなExcelシート]。データをExcelにインポートするのに適したコンマ区切り値(CSV)テキストファイルに出力するオプションを提供する必要があります。
以下は、上記の説明に基づいて動作するテスト済みスクリプトです。質問に投稿されたファイルと特定の条件(欠落しているデータなど)をテストするために、データをいくつかの修正でテストしました。
テストファイルは166行で構成され、パフォーマンステスト用に2600のコピーを作成しました。私のラップトップでは、1.25秒で2600個の166行ファイルを実行しましたが、これは毎秒約300,000行です。 512KBファイルは約40倍のサイズなので、おそらく1分でバッチ処理が行われます。
-c
CSV
出力をExcelにインポートするにはパラメータが必要です。
Paul--) ./awkFastParse
DataSet lnL kappa (ts/tv) omega (dN/dS) tree length for dN tree length for dS
EOA100W06LO -5160.995083 1.50195 0.05318 0.6637 12.4810
EOA110W06LO -5160.995083 1.50195 0.05318 0.6637 12.4810
EOA120W06LO N/A N/A N/A N/A N/A
EOA130W06LO -5160.995083 N/A 0.05318 0.6637 12.4810
EOA140W06LO -5160.995083 N/A 0.05318 0.6637 12.4810
EOA150W06LO -5160.995083 1.50195 0.05318 0.6637 12.4810
EOA160W06LO N/A N/A N/A 0.6637 12.4810
EOA170W06LO -5160.995083 1.50195 0.05318 0.6637 12.4810
EOA180W06LO -5160.995083 1.50195 0.05318 0.6637 12.4810
Paul--)
Paul--) ./awkFastParse -c
DataSet,lnL,kappa (ts/tv),omega (dN/dS),tree length for dN,tree length for dS
EOA100W06LO,-5160.995083,1.50195,0.05318,0.6637,12.4810
EOA110W06LO,-5160.995083,1.50195,0.05318,0.6637,12.4810
EOA120W06LO,N/A,N/A,N/A,N/A,N/A
EOA130W06LO,-5160.995083,N/A,0.05318,0.6637,12.4810
EOA140W06LO,-5160.995083,N/A,0.05318,0.6637,12.4810
EOA150W06LO,-5160.995083,1.50195,0.05318,0.6637,12.4810
EOA160W06LO,N/A,N/A,N/A,0.6637,12.4810
EOA170W06LO,-5160.995083,1.50195,0.05318,0.6637,12.4810
EOA180W06LO,-5160.995083,1.50195,0.05318,0.6637,12.4810
Paul--)
スクリプトは現在のサブディレクトリ「Data」からファイルをインポートし、すべてのパス名と「_M0_mlc」ファイル名拡張子を切り取ります。お客様の要件を満たすには、一部の変更が必要な場合があります。改善が必要な場合は投稿してください。
#! /bin/bash --
[[ "${1}" = "-c" ]] && { Csv=1; shift; } #.. Option to set CSV output.
awkFastParse () {
AWK='
BEGIN {
txTitle = "DataSet,lnL,kappa (ts/tv),omega (dN/dS)," \
"tree length for dN,tree length for dS";
split (txTitle, Title, /,/);
fmtCSV = "%s,%s,%s,%s,%s,%s\n";
fmtCol = "%-12s %-18s %-18s %-18s %-18s %-18s\n";
fmtRow = (Csv) ? fmtCSV : fmtCol;
printf (fmtRow, Title[1], Title[2], Title[3], Title[4], Title[5], Title[6]);
stderr = "cat 1>&2"; NUL = "\000"; NL = RS; RS = NUL;
reAnyTag = "(lnL|kappa|omega|tree length for (dN|dS))";
reValue = "[-+]?[0-9]+[.][0-9]+";
Tag["lnL"]; Tag["kappa"]; Tag["omega"];
Tag["tree length for dN"]; Tag["tree length for dS"];
}
function doFile (fn, Local, g, Set, fnr, txt, tag, j, cut, value) {
RS = NL;
while ((g = (getline txt < fn)) > 0) {
++fnr;
#.. Optimisation -- skip any line that does not contain a Tag.
if (txt !~ reAnyTag) continue;
#.. Find all tags in this line.
for (tag in Tag) {
#.. Only take the first value in any file.
if (tag in value) continue;
#.. Locate the tag, or skip.
if ((j = index (txt, tag)) == 0) continue;
#.. Isolate the rest of the line.
cut = substr (txt, j);
#.. The value is the next real number.
if (match (cut, reValue)) {
value[tag] = substr (cut, RSTART, RLENGTH);
}
}
#.. Optimisation -- if we have one of each value, skip the file.
if (length (value) == length (Tag)) break;
}
if (g < 0) printf ("%s: %s\n", fn, ERRNO) | stderr;
close (fn);
RS = NUL;
#.. Format and print the line for this file.
Set = fn; sub (/^.*\//, "", Set); sub (/_M0_mlc$/, "", Set);
for (tag in Tag) if (! (tag in value)) value[tag] = "N/A";
printf (fmtRow, Set, value["lnL"], value["kappa"], value["omega"],
value["tree length for dN"], value["tree length for dS"]);
}
{ doFile( $0); }
'
awk -v Csv="${Csv}" -f <( printf '%s' "${AWK}" )
}
#.. Generate a list of file names with null terminations.
find Data -name '*_M0_mlc' -print0 | sort -z | awkFastParse