/ /コンテンツに基づいて入力を複数の出力に分割しますか? -bash、unix、shell、text

コンテンツに基づいて複数の出力に分割しますか? - bash、unix、shell、text

次のようなファイルがあるとしましょう:

xxxx aa whatever
yyyy bb whatever
zzzz aa whatever

次の内容を含む2つのファイルに分割します。

最初:

xxxx aa whatever
zzzz aa whatever

二番目:

yyyy bb whatever

つまり行のいくつかの値に基づいて行をグループ化します(ルールは次のとおりです:スペースで区切られた2番目の単語)。ただし、グループ内の行を並べ替えないでください。

もちろん、それを行うためのプログラムを書くことはできますが、このようなことができる準備ができているツールがあるかどうか疑問に思っています。

申し訳ありませんが、私はそれを想定していなかったため、言及しませんでした。かなり明白-さまざまな「単語」の数は膨大です。それらのうち少なくとも10000について話している。つまり事前の単語の列挙に基づく解決策は機能しません。

また、マルチパススプリットはあまり好きではありません。問題のファイルは通常かなり大きくなります。

回答:

回答№1は6

次の名前のファイルが作成されます output.aa, output.bb等:

awk "{print >> "output." $2}" input.file

回答№2の場合は1

そうですね、grepを実行して一致する行を取得し、grep -vを実行して一致しない行を取得することができます。

うーん、できるよ sort -f" " -s -k 2,2、しかしそれはO(n log n)です。