我有一个~23000行的SQL转储,其中包含几个数据库的数据价值。我需要提取这个文件的某个部分(即单个数据库的数据),并将其放在一个新文件中。我知道我想要的数据的开始行号和结束行号。
谁知道一个Unix命令(或一系列命令)可以从文件中提取16224到16482行之间的所有行,然后将它们重定向到一个新文件中?
我有一个~23000行的SQL转储,其中包含几个数据库的数据价值。我需要提取这个文件的某个部分(即单个数据库的数据),并将其放在一个新文件中。我知道我想要的数据的开始行号和结束行号。
谁知道一个Unix命令(或一系列命令)可以从文件中提取16224到16482行之间的所有行,然后将它们重定向到一个新文件中?
当前回答
我会用:
awk 'FNR >= 16224 && FNR <= 16482' my_file > extracted.txt
FNR包含从文件中读取的行的记录(行)号。
其他回答
您可以使用'vi',然后使用以下命令:
:16224,16482w!/tmp/some-file
另外:
cat file | head -n 16482 | tail -n 258
编辑:-只是补充解释,您使用head -n 16482显示前16482行,然后使用tail -n 258显示第一次输出的最后258行。
我写了一个叫做splitter的Haskell程序,它就是这样做的:阅读我发布的博客文章。
您可以使用该程序如下:
$ cat somefile | splitter 16224-16482
这就是它的全部。您将需要Haskell来安装它。只是:
$ cabal install splitter
这样就做完了。我希望这个程序对您有用。
perl -ne 'print if 16224..16482' file.txt > new_file.txt
cat dump.txt | head -16224 | tail -258
应该能行。这种方法的缺点是,您需要做算术来确定tail的参数,并考虑是否希望“between”包含结束行。
艾德:使用
ed -s infile <<<'16224,16482p'
-s抑制诊断输出;实际的命令在一个here-string中。具体来说,16224,16482p在所需的行地址范围上运行p (print)命令。