2010-11-18 9 views
3

はのは、このようなファイルがあるとしましょう:内容に基づいて複数の出力に分割入力しますか?

xxxx aa whatever 
yyyy bb whatever 
zzzz aa whatever 

私が含む、2つのファイルに分割たい:

最初:

xxxx aa whatever 
zzzz aa whatever 

を二:

yyyy bb whatever 

e私は行のいくつかの値に基づいて行をグループ化したい(ルールは2番目の単語をスペースで区切ってもよい)が、グループ内の行の順序を変更しない。

もちろん、私はそれを行うためのプログラムを書くことができますが、このようなことをする準備ができているツールがあるのでしょうか?

申し訳ありませんが、私はそれがかなり明白であると仮定したので、言及しませんでした - 異なる "言葉"の数は巨大です。我々はそれらの少なくとも10000について話している。私。手前の言葉の列挙に基づくあらゆる解決法は機能しません。

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

答えて

6

これは、私たちはstdoutとstderrに他の線との一致を持っているフラグを追加することができるかどうかをGNU grepのの、その後のメンテナで議論output.aaoutput.bbという名前のファイルなど:

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

これは素晴らしいことです! IO操作の数を制限するためにバッファリングさえします。どうもありがとう。 –

1

まあ、grepを使って一致する行を取得し、grep -vを使って一致しない行を取得することができます。

おはよう、あなたはsort -f" " -s -k 2,2とすることができますが、それはO(n log n)です。

+0

年頃1994を作成します。しかし、彼はアイデアが気に入らなかった:-)。 –

関連する問題