2

重複行の削除に関する記事をいくつか見ましたが、もう少し具体的なものが必要です。生データの例を次に示します。

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のみ])。何か案は?

4

1 に答える 1

1

トリックをするようsort -k4,4 | uniqですか?(またはsort +3Solarisバージョンが十分に古い場合。)

于 2012-09-20T22:17:24.207 に答える