按照模式将非常大的文件分成小文件

Divide very large file into small ones following pattern

我一直在努力解决这个问题,但收效甚微,所以我来这里是为了获得一些新的建议。

我正在尝试将每次扫描的数据提取到单独的文件中。

问题是在创建了 3196 个文件后,我收到错误消息:awk“打开的文件太多”。

我知道我需要关闭 awk 创建的文件,但我不知道该怎么做。

文本输入文件看起来像这样(最多 80 000 次扫描):

Scan    1
11111    111
22222    221
...
Scan    2
11122    111
11122    111
...
Scan    3
11522    141
19922    141
...

现在我一直在做:

awk '/.*Scan.*/{n++}{print >"filescan" n }' inputfile

创建 3196 个文件后,每次扫描和崩溃都会给我一个递增的输出文件..

cat filescan1
Scan    1
11111    111
22222    221
...

有什么想法吗?

您需要 close the output file 因为 awk 保持文件句柄打开。

awk '/.*Scan.*/{ 
  close(file);
  n++;
}
{ 
  file="filescan"n; 
  print >> file;
}' inputfile