当前位置:  开发笔记 > 编程语言 > 正文

打印一个文件,跳过Bash中的第一行X行

如何解决《打印一个文件,跳过Bash中的第一行X行》经验,为你挑选了11个好方法。

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



1> SingleNegati..:

你需要尾巴.一些例子:

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

如果你真的需要跳过特定数量的"第一"线,请使用

$ tail -n + 
< 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  
< last N lines of file. >


或"tail --lines = + ..."为可读命令人群:-)
在centos 5.6`tail -n + 1`显示整个文件,`tail -n + 2`跳过第一行.奇怪.`tail -c + `也一样.
我可以确认需要`tail -n + 2`来跳过Darwin/Mac OS X的第一行.
@JoelClark不,@ NickSoft是对的.在Ubuntu上,它是`tail -n + `,我刚刚测试过它.所以`tail -n + 1`不会跳过任何东西,而是从第一行开始.
这必须是过时的,但是,tail -n + 2或者tail -n +2可以工作,就像使用getopt的所有短命令一样,你可以在它的开关旁边运行参数,前提是交换机是组中的最后一个,显然像tail -nv + 2这样的命令不起作用,它必须是tail -vn + 2.如果你不相信我自己尝试.

2> David Parks..:

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

$ sed 1,10d file.txt


在更一般的情况下,你必须使用`sed 1,Xd`,其中X是要删除的初始行数,X大于1.

3> Eddie..:

如果您的系统上有GNU尾部,则可以执行以下操作:

tail -n +1000001 huge-file.log

+是完成你想要的角色.引用手册页:

如果K的第一个字符(字节数或行数)是"+",则从每个文件的开头以Kth项开始打印.

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



4> newtover..:

使用AWK的简洁版本:

awk 'NR > 1e6' myfile.txt

但我建议使用整数.


如果您需要跳过文件中间的某些行,例如'awk'!(5
5> 小智..:

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

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


这有点误导,因为有人可能从字面上解释`(x + 1)`.例如,对于x = 2,它们可以键入`(2 + 1)`或甚至`(3)`,两者都不起作用.写一个更好的方法可能是:要跳过前X行,Y = X + 1,使用`tail -n + Y `

6> maerics..:

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

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



7> tuomassalo..:

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

例:

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



8> 小智..:

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

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

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

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



9> sourcerebels..:

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

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



10> 小智..:
sed -n '1d;p'

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



11> Dana the San..:

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

head -n  | tail -n 

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


不是最有效的答案,因为您需要对文件执行"wc -l"以获取行数,然后添加以添加百万:-).你可以用"尾巴"来做到这一点.
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有