我有一个很长的文件,我想打印,跳过前1,000,000行,例如。
我查看了猫的手册页,但我没有看到任何选项可以这样做。我正在寻找一个命令来执行此操作或一个简单的Bash程序。
我有一个很长的文件,我想打印,跳过前1,000,000行,例如。
我查看了猫的手册页,但我没有看到任何选项可以这样做。我正在寻找一个命令来执行此操作或一个简单的Bash程序。
当前回答
如果您的系统上有GNU tail可用,您可以执行以下操作:
tail -n +1000001 huge-file.log
它是你想要的+字符。引用手册页中的内容:
如果K的第一个字符(字节数或行数)是a ' +',从每个文件开头的第k项开始打印。
因此,正如注释中所指出的那样,输入+1000001开始打印前1,000,000行之后的第一项。
其他回答
使用带范围地址的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实用程序。
只是提出一个sed替代方案。要跳过前一百万行,请尝试|sed '1,1000000d'。
例子:
$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005
Use:
sed -n '1d;p'
该命令将删除第一行并打印其余部分。
我需要做同样的事情,并找到了这个线程。
我试过“tail -n +”,但它只是打印了所有内容。
更多的+行在提示符上工作得很好,但结果是在无头模式下运行时表现完全不同(cronjob)。
最后我自己写了这个:
skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"
如果你想看到前10行,你可以使用sed,如下所示:
sed -n '1,10 p' myFile.txt
或者如果你想看到从20到30的行,你可以使用:
sed -n '20,30 p' myFile.txt