私は通常、さまざまな数学プログラム内で使用できる一意の識別子を持つ raw ファイルまたは csv ファイルを使用します。最近、レコードを相互に照合する唯一の方法が、テキスト ファイル内で保持されている位置によるファイルのフォルダーを与えられました。
File01.txt の例を次に示します。
AA1000
AA2222
AB1X6110305126101234760ABA08B88 ZZ1111110000
AB2X611030512612006100901C109Z 001110001110
AB2X611030512612006100901X571Z 007410000000
AB1X6110305127101234760ABA10B89 ZZ1111110022
AB2X611030512712006101001A571Z 007410000000
AB1X6110305128101234760ABA10C00 ZZ1111110055
AB2X611030512812006101001A571Z 007410007410
AC11
行 3 は AB1 で始まり、行 4 から 8 は AB2 で始まり、行の位置 4 から始まる 12 文字のストリングによって示されるように、行 3 に対応します。この 12 文字の文字列がクラスタを照合する唯一の方法ですが、必ずしもすべての行で一意であるとは限りません。4 行目から 8 行目の AB2 グループが 3 行目の AB1 グループに対応していることを知る唯一の方法は、4 行目から 8 行目が 3 行目に続くことです。私のような非プログラマーにとって、これは悪夢です。
私がやりたいことは、File01.txt を読み込んで、AB1 行に到達するまで 1 行ずつループすることです。AB1 ラインを保存してから、ループを続けたいと思います。AB1 行の後には常に、少なくとも 1 つの AB2 行が続きます。AB2 行を配列に書き込み、メモリから AB1 行を追加し、新しい AB1 行が検出されるまでループと配列への書き込みを続けたいと思います。新しい AB1 行はメモリに保存され、次の AB1 行まで上記のように実行され、ファイルの最後 (通常は AC11 行) に到達するまで同様に繰り返されます。
出力ファイルは、次のようになると思います。
AB2X611030512612006100901C109Z 001110001110 AB1X6110305126101234760ABA08B88 ZZ1111110000
AB2X611030512612006100901X571Z 007410000000 AB1X6110305126101234760ABA08B88 ZZ1111110000
AB2X611030512712006101001A571Z 007410000000 AB1X6110305127101234760ABA10B89 ZZ1111110022
AB2X611030512812006101001A571Z 007410007410 AB1X6110305128101234760ABA10C00 ZZ1111110055
理想的ではありませんが、そのタイプのデータを処理して文字列を分割することはできます。これは、bash や awk、sed などを使用して可能ですか?
私に提供される可能性のあるヘルプ/洞察を事前に感謝します。