You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash中如何从指定起始行提取指定行数的文本内容?

从文本文件中按起始行号+提取行数获取内容的几种方法

你的awk命令失效的原因是BEGIN块中使用了错误的变量引用语法:e=$s+10里的$s是用来引用当前行第s个字段的语法,但BEGIN块执行时还未读取任何行,$s为空值,导致e被计算为10,条件NR>=100&&NR<=10永远不成立,所以没有输出。

下面是几种可行的实现方式:

1. 使用awk

基础写法

直接在条件中计算结束行号,或者通过变量定义参数,更灵活:

# 直接写死行号范围
awk 'NR>=100 && NR<=110' test_file.txt

# 通过变量传递起始行和提取行数(更易复用)
awk -v start=100 -v count=10 'NR>=start && NR<=start+count' test_file.txt

高效写法(大文件推荐)

找到起始行后开始计数,打印够指定行数就直接退出,避免遍历整个文件:

awk -v start=100 -v count=10 'NR>=start{print; if(++i==count) exit}' test_file.txt

2. 使用sed

通用POSIX兼容写法

直接指定行号范围(起始行100,结束行100+10=110):

sed -n '100,110p' test_file.txt

GNU sed简化写法

如果使用GNU sed(大部分Linux系统默认),可以用+符号直接指定从起始行开始的行数(注意这里是+9,因为包含起始行在内共10行):

sed -n '100,+9p' test_file.txt

3. 使用head+tail组合(coreutils工具)

这是Unix系统中非常常用的组合,逻辑直观:

tail -n +100 test_file.txt | head -n 10

解释:tail -n +100会输出从第100行开始的所有内容,再通过head -n 10截取前10行,正好得到目标内容。

内容的提问来源于stack exchange,提问作者sdbbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:31:18