私は試した:
awk '{if (last != $1) close(last); print > $1; last = $1}' file
awk -F$'\t' '{ print > ($1) }' file
awk '{if (last != $1) close(last); print >> $1; last = $1}' file
非常に大きなテキストファイル(33 GB)を、最初の列の名前付き複数のファイルに分割します。
小さいファイルの場合はすべてうまく機能しますが、大きなファイルの場合は列タイプawk
(コマンド1と2)の終わりで停止するか、「.」を含む列に改行文字を入力することを忘れます。その中で(コマンド3)。
例: 「10」タイプの列の実際の端に達する前に停止します。
10 69331427 1
10 69331428 1
10 69331429 1
10 69331430 1
10 69331431 1
10
編集:ファイルを閉じると役に立つようです。
'{print >> $1; close($1)}'
GNU Awk 4.1.4、API:1.1(GNU MPFR 4.0.1、GNU MP 6.1.2)
答え1
「非常に大きなテキストファイル(33GB)を最初の列と呼ばれる複数のファイルに分割します。」すべてのUNIXシステムでGNU awkを使用する方法は次のとおりです。
awk '{print > $1}' file
それはすべてです。問題が発生した場合は、awkコマンド以外の原因で発生する可能性があります。たとえば、ドライブにスペースが不足しているか、入力ファイルに奇妙な制御文字が含まれている可能性があります。
awk stops near the end of column type
私はあなたが何を言っているのかわからずforgets to input newline characters for columns that have "." in them
、そうではありませんit just stops before reaching real end of column of type "10"
。これは、部分的に「列タイプ」があなたに何を意味するのかを示す質問がないためです。