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