カンマ区切りの単語に基づいて並べ替え


11

通常のコマンド:sortは、列または仮想列(\%cまたは\%v)に基づいて行をソートできます。より高いレベルの論理列をソートキーとして使用できますか?正規表現の使用は、このシナリオでは少し複雑に見え(列は行末にありますか?)、ソートユーティリティの機能(sork -k)と似ていますが、この機能によるソートはWindowsでは使用できません。Vimプラグインも役立ちます。

たとえば、コンマで区切られた最後の列に従って、下の2行を並べ替えます。私の実際のシナリオには、はるかに多くの列と文字列パターンがあります。列区切り文字を指定すると、大幅に簡素化されます。

xxx,yyy,zzz,0x123
zzxz,xxxx,yyyy,0x121

回答:


11

Vimのソートを使用すると、をスキップするか{pattern}、それだけを考慮することができます(rフラグ付き)。最後のカンマ区切りの列の正規表現は簡単に定式化できます。最後のカンマまでをすべてスキップして、行に含めます。

:sort/.*,/

他の列については、rフラグを使用し、次のようにしてN(ここでは:) 2前の列をスキップします\zs

:sort/\([^,]*,\)\{2}\zs[^,]*/

1
最後の列はたまたま、xフラグを使用して16進数になっているので、役立つかもしれません。
jecxjo

これは素晴らしいですね。最後の列は特別な場合があります。中央の列の簡単な表現はありますか?
トムソン2015年

あなたはそのために何かを思いつくことができたと思いました、しかしあなたはここにいます。横にあるチェックマークをクリックして、私の(編集された)回答を受け入れてください。ありがとう!
インゴカーカット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.