打印在Bash中跳过X行的文件

我有一个很长的文件,我想打印,但跳过第一个1e6线,例如。 我看着猫的手册页,但我没有看到任何select这样做。 我正在寻找一个命令来做这个或一个简单的bash程序。

你需要尾巴

$ 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 -n +1000001 huge-file.log 

这是+angular色,做你想做的。 引用从手册页:

如果K(字节或行数)的第一个字符是“+”,则从每个文件的开始处的第K个项开始打印。

因此,正如在评论中指出的那样,在第一百万行后面加上+1000001开始打印第一项。

最简单的方法,我发现删除文件的前十行:

 $ sed 1,10d file.txt 

AWK的详细版本较less:

 awk 'NR > 1e6' myfile.txt 

但我会build议使用整数。

只是提出一个sedselect。 :)要跳过第一百万行,请尝试|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 

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

如果你想看第10行,你可以使用sed如下:

 sed -n '1,10 p' myFile.txt 

或者如果你想看到从20到30行,你可以使用:

 sed -n '20,30 p' myFile.txt 

如果你想跳过前两行
tail -n +3 <filename>

如果你想跳过第一个X行
tail -n +$((x+1)) <filename>

使用带范围地址的sed delete命令 。 例如:

 $ sed 1,100d file.txt # Print file.txt omitting lines 1-100. 

或者,如果只想打印已知范围,请使用带-n标志的print命令:

 $ sed -n 201,300p file.txt # Print lines 201-300 from file.txt 

这个解决scheme应该可以在所有的UNIX系统上可靠地工作,不pipe有没有GNU工具。

你可以使用head和tail命令来做到这一点:

 head -n <num> | tail -n <lines to print> 

其中num是1e6 +您要打印的行数。

 cat < File > | awk '{if(NR > 6) print $0}' 

我需要做同样的事情,发现这个线程。

我试过“tail -n +,但是它只是印刷一切。

在提示符下,+行很好地工作,但是在无头模式(cronjob)下运行时performance得完全不同。

我终于自己写了这个:

 skip=5 FILE="/tmp/filetoprint" tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"