我有一个很长的文件,我想打印但跳过第一个1e6行例如。我查看了猫手册页,但我没有看到任何选项。我正在寻找执行此操作的命令或简单的bash程序。

有帮助吗?

解决方案

你需要尾巴。一些例子:

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

如果你真的需要跳过特定数量的<!> quot;首先<!>行,使用

$ 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

这是+字符,可以满足您的需求。引用手册页:

  

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

因此,正如评论中所述,将+1000001开始使用第一个1,000,000行之后的第一个项目进行打印。

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

$ sed 1,10d file.txt

使用AWK的简洁版本:

awk 'NR > 1e6' myfile.txt

但我建议使用整数。

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

示例:

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

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

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

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

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

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

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

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

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

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

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

无论是否存在GNU实用程序,此解决方案都应在所有UNIX系统上可靠地运行。

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

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

您可以使用head和tail命令执行此操作:

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

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

sed -n '1d;p'

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

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

我需要做同样的事情并找到这个帖子。

我试过<!>“;尾巴-n +,但它只打印了一切。

更多+行在提示符下运行良好,但结果表明它在无头模式(cronjob)中运行时表现完全不同。

我终于自己写了这个:

skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top