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

时间:2015-08-26 14:00:29

标签: bash awk split large-files

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

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

问题是在创建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
...

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你需要close the output file,因为awk保持文件句柄处于打开状态。

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