如何从大型文本文件中提取一定范围内的行

如何从大型文本文件中提取一定范围内的行

我有一个几 GB 大小的 SQL 转储。我想从文件中提取几千行(但实际上是任意数量的连续行)到另一个文件,以便我可以单独运行它。

答案1

有很多方法

大王

我首先使用命令行awk删除行的实用程序,我找到了使用 vim 的数字

cat large-file.sql | \
    awk '{if (NR>=14054874) print}' | \
    awk '{if (NR <=2224) print}' > large-file-portion.dump.sql

找到第二个数字是因为链接条件&&导致 awk 不执行任何操作。

要在 vim 中打开行号,我运行了以下命令

vi large-file.sql
:set number
/token that you are looking for/
:q!

头 | 尾

我发现的大多数其他答案都使用或者尾巴命令单独存在,并不代表文件的范围。我设法按照以下安排将它们组合起来。

cat large-file.sql | head -n 14053098 | tail -n 2224 > large-file-portion.dump.sql

使用时间实用程序我能够根据最大驻留集大小和时间找到最佳性能的解决方案

表现

awk 解决方案
real       162.66
user         0.23
sys          1.74
806912  maximum resident set size
     0  average shared memory size
     0  average unshared data size
     0  average unshared stack size
   208  page reclaims
     0  page faults
     0  swaps
     0  block input operations
     0  block output operations
     0  messages sent
     0  messages received
     0  signals received
172238  voluntary context switches
  3155  involuntary context switches
头|尾解决方案
real       136.77
user         0.22
sys          1.68
811008  maximum resident set size
     0  average shared memory size
     0  average unshared data size
     0  average unshared stack size
   209  page reclaims
     0  page faults
     0  swaps
     0  block input operations
     0  block output operations
     0  messages sent
     0  messages received
     0  signals received
159381  voluntary context switches
 22392  involuntary context switches

希望通过这些信息,您能够获得足够的信息来做出自己的选择(或者提出一个我很乐意阅读的替代答案)

相关内容