「awk」を使用した列名ベースのファイル分割が失敗する

「awk」を使用した列名ベースのファイル分割が失敗する

私は試した:

  1. awk '{if (last != $1) close(last); print > $1; last = $1}' file

  2. awk -F$'\t' '{ print > ($1) }' file

  3. 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"。これは、部分的に「列タイプ」があなたに何を意味するのかを示す質問がないためです。

おすすめ記事