コマンドを1回実行するだけでは問題の変換を実行できないため:sort
、2段階のプロセスとしてアプローチしてみましょう。
1.最初のステップは、2番目の列の値(最初の列とコンマで区切られている)で行をソートすることです。これを行うには、コマンドを使用して:sort
、最初の列と次のコンマに一致する正規表現を渡します。
:sort/^[^,]*,/
:sort
各行で指定されたパターンが一致した直後から始まるテキストを比較すると、目的の並べ替え動作が得られます。辞書式ではなく数値で値を比較するには、次のn
フラグを使用します。
:sort n/^[^,]*,/
2. 2番目のステップでは、ソートされた行を実行し、2番目の列に同じ値を持つ連続する行のすべてのブロックに1つを除いて、すべての行を削除します。:global
特定のパターンに一致するすべての行で特定のExコマンドを実行するコマンドに基づいて実装を構築すると便利です。この目的のために、2番目の列に次の行と同じ値が含まれている行を削除できます。この形式化(列の値内でコンマを使用できないという最初の仮定を伴う)により、次のパターンが得られます。
^[^,]*,\([^,]*\),.*\n[^,]*,\1,.*
このパターンを満たすすべての行でコマンドを実行し、:delete
上から下に並べ替えられた順序で実行すると、2番目の列の個別の値ごとに1行だけになります。
:g/^[^,]*,\([^,]*\),.*\n[^,]*,\1,.*/d_
3.最後に、両方の手順を1つのExコマンドに組み合わせることができます。
:sort/^[^,]*,/|g/^[^,]*,\([^,]*\),.*\n[^,]*,\1,.*/d_