0

巨大なソート済みテキスト ファイル (1000 万行) があります。それぞれ約10,000サイズの小さなファイルに分割したい。ただし、最終行の最初のフィールドが他のファイルの最初の行の最初のフィールドと同じであってはなりません。つまり、分割ポイントは 10k 番目の行の近くにある必要がありますが、分割前の行は後の行とは異なる最初のフィールドを持つ必要があります。

面倒な方法を考えました。別のファイルで、lineN と lineN+1 の最初のフィールドが異なる可能性のあるすべての分割位置を何らかの形で出力します。次に、10k に近い分割ポイントのみを選択するプログラムを作成します。しかし、split分割されたファイルごとに固定行しか許可されないため、コマンドを使用できません。

問題を解決するには?

4

2 に答える 2

1

テストされていないこのようなものは、それを行う必要があります。

awk '
nr == 10000 { got10k = 1 }
got10k && ($1 != prev) { nr = 0 }
++nr == 1 { fileName = "outfile" ++numFiles; got10k = 0 }
{ print > fileName; prev = $1 }
' file
于 2013-10-06T12:24:55.053 に答える
0

コマンドを使用しawkて小さなスクリプトを記述し、データをさまざまなファイルに書き込むことができます。

ループを使用するawk forと、2 つのフィールドが前の行のフィールドと一致するかどうかを確認し、(10k 行の読み取り/書き込みの後) 同じファイルへの書き込みを続行し、そうでない場合は新しいファイルに書き込みます。

于 2013-10-05T16:57:26.607 に答える