我有一个很长的文件,我想打印,跳过前1,000,000行,例如。

我查看了猫的手册页,但我没有看到任何选项可以这样做。我正在寻找一个命令来执行此操作或一个简单的Bash程序。


当前回答

使用AWK的一个不那么冗长的版本:

awk 'NR > 1e6' myfile.txt

但我建议使用整数。

其他回答

你需要尾巴。一些例子:

$ tail great-big-file.log
< Last 10 lines of great-big-file.log >

如果你真的需要跳过特定数量的“第一行”,请使用

$ tail -n +<N+1> <filename>
< filename, excluding first N lines. >

也就是说,如果你想跳过N行,你开始打印第N+1行。例子:

$ tail -n +11 /tmp/myfile
< /tmp/myfile, starting at line 11, or skipping the first 10 lines. >

如果你只想看到最后几行,可以省略“+”:

$ tail -n <N> <filename>
< last N lines of file. >

如果您的系统上有GNU tail可用,您可以执行以下操作:

tail -n +1000001 huge-file.log

它是你想要的+字符。引用手册页中的内容:

如果K的第一个字符(字节数或行数)是a ' +',从每个文件开头的第k项开始打印。

因此,正如注释中所指出的那样,输入+1000001开始打印前1,000,000行之后的第一项。

只是提出一个sed替代方案。要跳过前一百万行,请尝试|sed '1,1000000d'。

例子:

$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005

这个shell脚本对我来说很好:

#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
    if (NR >= initial_line && NR <= end_line) 
    print $0
}' $3

与这个示例文件(file.txt)一起使用:

one
two
three
four
five
six

命令(它将从文件的第二行到第四行提取):

edu@debian5:~$./script.sh 2 4 file.txt

命令输出:

two
three
four

当然,你可以改进它,例如通过测试所有参数值都是预期的:-)

Use:

sed -n '1d;p'

该命令将删除第一行并打印其余部分。