在 Bash 中打印文件,跳过前 X 行[重复]
- 2024-10-18 09:00:00
- admin 原创
- 87
问题描述:
我有一个很长的文件需要打印,例如跳过前 1,000,000 行。
我查看了 cat 手册页,但没有看到任何选项可以执行此操作。我正在寻找执行此操作的命令或简单的 Bash 程序。
解决方案 1:
使用tail
。以下是一些示例:
$ tail file.log
< Last 10 lines of file.log >
跳过前 N 行:
$ tail -n +<N+1> <filename>
< filename, excluding first N lines. >
例如,跳过前 10 行:
$ tail -n +11 file.log
< file.log, starting at line 11, after skipping the first 10 lines. >
要查看最后 N 行,请省略“+”:
$ tail -n <N> <filename>
< last N lines of file. >
解决方案 2:
我发现删除文件前十行的最简单的方法:
$ sed 1,10d file.txt
在一般情况下,X
需要删除的初始行数为,对此,请向评论者和编辑表示感谢:
$ sed 1,Xd file.txt
解决方案 3:
如果您的系统上有 GNU tail,您可以执行以下操作:
tail -n +1000001 huge-file.log
它是+
执行您想要的操作的角色。引用手册页中的一段话:
如果 K(字节数或行数)的第一个字符是“+”,则从每个文件开头的第 K 项开始打印。
因此,正如评论中指出的那样,输入 +1000001 将从前 1,000,000 行之后的第一个项目开始打印。
解决方案 4:
如果您想跳过前两行:
tail -n +3 <filename>
如果你想跳过第一行 x:
tail -n +$((x+1)) <filename>
解决方案 5:
使用 AWK 的不太冗长的版本:
awk 'NR > 1e6' myfile.txt
但我建议使用整数。
解决方案 6:
使用带有范围地址的seddelete
命令。例如:
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 系统上可靠地运行。
解决方案 7:
使用:
sed -n '1d;p'
此命令将删除第一行并打印其余部分。
解决方案 8:
如果您想查看前 10 行,可以使用 sed,如下所示:
sed -n '1,10 p' myFile.txt
或者如果您想查看第 20 到第 30 行,您可以使用:
sed -n '20,30 p' myFile.txt
解决方案 9:
您可以使用 head 和 tail 命令执行此操作:
head -n <num> | tail -n <lines to print>
其中 num 是 1e6 + 您要打印的行数。
解决方案 10:
只是提出一种sed
替代方案。:)要跳过前一百万行,请尝试|sed '1,1000000d'
。
例子:
$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005
解决方案 11:
这个 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
当然,您可以改进它,例如通过测试所有参数值是否符合预期:-)
解决方案 12:
cat < File > | awk '{if(NR > 6) print $0}'
解决方案 13:
我需要做同样的事情并找到了这个线程。
我尝试了“tail -n +”,但它只是打印了所有内容。
更多的 +lines 在提示上运行良好,但事实证明,在无头模式(cronjob)下运行时它的行为完全不同。
我最终自己写了这个:
skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件