首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中打印文件的3、4和5行

问在Linux中打印文件的3、4和5行
EN

Stack Overflow用户
提问于 2014-03-20 18:54:09
回答 2查看 9.7K关注 0票数 0

我对Linux命令有问题。我必须插入文件/etc/passwd的输出3、4和5行,但我不知道如何做。我可以打印前五行:

代码语言:javascript
复制
head -n 5 /etc/passwd

但我不知道怎么删除前两行,或者从头开始。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-20 18:57:38

使用sed

代码语言:javascript
复制
sed -n '3,5p' /etc/passwd

或

代码语言:javascript
复制
sed -n '3,5p;6q' /etc/passwd

(第二个版本将在遇到第6行时退出,因此对于大型文件是有效的。)

使用awk

代码语言:javascript
复制
awk 'NR==3,NR==5' /etc/passwd

或

代码语言:javascript
复制
awk 'NR>=3{print}NR==5{exit}' /etc/passwd

(第二个变体在打印第5行之后退出,因此效率更高。)

使用perl

代码语言:javascript
复制
perl -ne 'print if $.>=3 and $.<=5;' /etc/passwd

或

代码语言:javascript
复制
perl -ne 'print if $.>=3; last if $.>5' /etc/passwd

(第二个变体同样更有效率。)

为了好玩,让我们在1000万行的输入上对这些不同的方法进行计时:

代码语言:javascript
复制
$ time seq 10000000 | sed -n '3,5p'
3
4
5

real    0m10.086s
user    0m9.173s
sys     0m0.101s

$ time seq 10000000 | sed -n '3,5p;6q'
3
4
5

real    0m0.012s
user    0m0.010s
sys     0m0.001s

$ time seq 10000000 | awk 'NR==3,NR==5'
3
4
5

real    0m12.906s
user    0m11.475s
sys     0m0.134s

$ time seq 10000000 | awk 'NR>=3{print}NR==5{exit}'
3
4
5

real    0m0.013s
user    0m0.001s
sys     0m0.010s

$ time seq 10000000 | perl -ne 'print if $.>=3 and $.<=5;'
3
4
5

real    0m15.982s
user    0m14.217s
sys     0m0.179s

$ time seq 10000000 | perl -ne 'print if $.>=3; last if $.>5'
3
4
5
6

real    0m0.013s
user    0m0.000s
sys     0m0.011s

很明显,在输入大的情况下,一旦得到所需的线路,退出是更有效的。不过,对于小投入而言,差别是可以忽略不计的。

票数 10
EN

Stack Overflow用户

发布于 2014-03-20 18:56:36

使用尾巴:

代码语言:javascript
复制
head -n 5 /etc/passwd | tail -n 3

尾返回文件的最后一行以及可以使用这两种功能的管道。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22542514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档