我有一个~23000行的SQL转储,其中包含几个数据库的数据价值。我需要提取这个文件的某个部分(即单个数据库的数据),并将其放在一个新文件中。我知道我想要的数据的开始行号和结束行号。
谁知道一个Unix命令(或一系列命令)可以从文件中提取16224到16482行之间的所有行,然后将它们重定向到一个新文件中?
我有一个~23000行的SQL转储,其中包含几个数据库的数据价值。我需要提取这个文件的某个部分(即单个数据库的数据),并将其放在一个新文件中。我知道我想要的数据的开始行号和结束行号。
谁知道一个Unix命令(或一系列命令)可以从文件中提取16224到16482行之间的所有行,然后将它们重定向到一个新文件中?
当前回答
Sed -n '16224,16482p' < dump.sql
其他回答
使用head/tail非常简单:
head -16482 in.sql | tail -258 > out.sql
使用sed:
sed -n '16224,16482p' in.sql > out.sql
使用awk:
awk 'NR>=16224&&NR<=16482' in.sql > out.sql
我写了一个叫做splitter的Haskell程序,它就是这样做的:阅读我发布的博客文章。
您可以使用该程序如下:
$ cat somefile | splitter 16224-16482
这就是它的全部。您将需要Haskell来安装它。只是:
$ cabal install splitter
这样就做完了。我希望这个程序对您有用。
# print section of file based on line numbers
sed -n '16224 ,16482p' # method 1
sed '16224,16482!d' # method 2
这可能为你工作(GNU sed):
sed -ne '16224,16482w newfile' -e '16482q' file
或者利用bash:
sed -n $'16224,16482w newfile\n16482q' file
sed -n '16224,16482 p' orig-data-file > new-file
其中16224、16482是起始行号和结束行号,包括。这是1索引。-n抑制将输入回显为输出,这显然不是你想要的;数字表示要执行以下命令的行范围;命令p输出相关的行。