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

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


当前回答

使用带范围地址的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

这个解决方案应该在所有Unix系统上可靠地工作,而不管是否存在GNU实用程序。

其他回答

你可以使用head和tail命令:

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

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

这个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

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

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

awk 'NR > 1e6' myfile.txt

但我建议使用整数。

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

$ sed 1,10d file.txt

在一般情况下,X是要删除的初始行数,这归功于评论者和编辑:

$ sed 1,Xd file.txt

如果你想看到前10行,你可以使用sed,如下所示:

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

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

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