次のテキスト構造を解析したいと思います。
>Cluster 423
0 56aa, >HWI-ST1448:257:C3V2HACXX:1:1106:19087:2550.1... at 92.86%
1 64aa, >HWI-ST1448:257:C3V2HACXX:1:1106:15943:81371.1... *
2 41aa, >HWI-ST1448:257:C3V2HACXX:1:1106:12438:91360.3... at 90.24%
3 45aa, >HWI-ST1448:257:C3V2HACXX:1:1108:13046:13861.1... at 91.11%
4 52aa, >HWI-ST1448:257:C3V2HACXX:1:1110:12260:2424.2... at 90.38%
>Cluster 434
0 64aa, >HWI-ST1448:257:C3V2HACXX:1:1106:15723:89894.1... *
1 46aa, >HWI-ST1448:257:C3V2HACXX:2:1312:1967:40935.2... at 97.83%
デフォルトでは、識別子は*
最後にaで表され、グループサイズは最後のグループ番号+ 1になります。
私が生成したい結果は次のとおりです(最後のグループサイズを参照)。
HWI-ST1448:257:C3V2HACXX:1:1106:15943:81371.1 5
HWI-ST1448:257:C3V2HACXX:1:1106:15723:89894.1 2
どんなアイデアがありますか?
ベストアンサー1
以下はやや粗雑なものです(エラー処理なし)。
awk '/\*$/ { save_id = substr($3, 2, length($3)-4) }
/^[0-9]/ { save_num = $1 }
NR > 1 && /^>/ {print save_id, save_num+1 }
END {print save_id, save_num+1 }
' data_file
*
(つまり、マッチ)で終わる行は、最初の文字()と最後の3文字()を/*$/
捨て、3番目の単語からグループIDを抽出します。>
...
- 数字で始まる行には、その数字(つまり最初の単語)が格納されます。
- ファイルの終わりで始まるか
>
(ただし、を指定してファイルの最初の行を除く)行が発生した場合は、対応する保存値を出力します。NR > 1