重複行の削除に関する記事をいくつか見ましたが、もう少し具体的なものが必要です。生データの例を次に示します。
11111 AA 1 date1
11111 BB 64 date1
11111 BB 64 date2
...
11111 BB 64 date64
11111 BB 64 date1
11111 BB 64 date2
...
11111 BB 64 date64
11111 BB ## date1
11111 BB ## date2
...
11111 BB ## date##
22222 AA 1 date1
22222 BB 64 date1
22222 BB 64 date2
...
22222 BB 64 date64
22222 BB 64 date1
22222 BB 64 date2
...
22222 BB 64 date64
22222 BB ## date1
22222 BB ## date2
...
22222 BB ## date##
注:##は64未満の数値です。
そのファイルを編集して、次のようにする必要があります。
11111 AA 1 date1
11111 BB 64 date1
11111 BB 64 date1
11111 BB ## date1
22222 AA 1 date1
22222 BB 64 date1
22222 BB 64 date1
22222 BB ## date1
行の最初の部分に一致させるために正規表現とともにawk、sed、またはedを使用するいくつかの例を見てきました。私の混乱は、「BB64」と「BB##」の出現と、すべてのBB行だけでなく最初の行も削除することです。
重要な情報:Solarisv5.8でこのcshスクリプトを実行する
AAラインは、そこにあることを知っていることを除いて、この質問では重要ではありません(私たちはそれらに対して何もしていません)。
これが基本的に私がこれまでに得たものです(他の言語を使用した例を見るとまだ構文の問題があるので、修正できる場合は実行してください):
sed 'N;(\d{1,8}\sBB\s\d{1,2}.+\n);P;D' filename
構文が原因でエラーが発生しなかった場合は、最初の「BB64date1」以外のすべてのBB行が削除されると確信しています。上記の私のsed正規表現はuniqに基づいていると思いますが、各BBの最初の日付が必要になるため(11111、22222ごとにBB 64のシリーズが複数ある場合)、行全体ではなく、行の最初の部分にのみ一致します。などなど、出力には各シリーズに対して同一のBB 64行が含まれている必要があります[日付1のみ])。何か案は?