Bash 从 Z 行开始从文件中读取 N 行
Bash read N lines from file starting from line Z
我有文本文件:
34
3467uy
56ytyyu
And so on
我想从此文件中读取从 Z 行开始的 N 行。我知道如何使用 (head -n N) 或尾部读取前 N 行。我现在知道如何使用 tail 从 Z 行读取到文件末尾。但我找不到如何从特定行开始读取特定数量。
求助!
管道 tail
的输出到 head
:
tail -n +
Z file | head -n
N
例如:
$ seq 100 | tail -n +15 | head -n 5
15
16
17
18
19
这可以使用 sed
来完成。例如,要发出文件中的第 10 行到第 20 行:
sed -n '10,+10p' a_file
使用 awk
:下面的示例将从第 3 行打印到第 5 行(3+2 行)。设置 start_line
和 buffer
变量以打印从 start_line
再加上 buffer
行。
awk -vstart_line=3 -vbuffer=2 'NR>=start_line && NR<=start_line+buffer' file
使用 GNU sed:
seq 1 10 | sed '2,+3!d'
输出:
2
3
4
5
来自man sed
:
addr1,+N
: Will match addr1 and the N lines following addr1.
我有文本文件:
34
3467uy
56ytyyu
And so on
我想从此文件中读取从 Z 行开始的 N 行。我知道如何使用 (head -n N) 或尾部读取前 N 行。我现在知道如何使用 tail 从 Z 行读取到文件末尾。但我找不到如何从特定行开始读取特定数量。 求助!
管道 tail
的输出到 head
:
tail -n +
Z file| head -n
N
例如:
$ seq 100 | tail -n +15 | head -n 5
15
16
17
18
19
这可以使用 sed
来完成。例如,要发出文件中的第 10 行到第 20 行:
sed -n '10,+10p' a_file
使用 awk
:下面的示例将从第 3 行打印到第 5 行(3+2 行)。设置 start_line
和 buffer
变量以打印从 start_line
再加上 buffer
行。
awk -vstart_line=3 -vbuffer=2 'NR>=start_line && NR<=start_line+buffer' file
使用 GNU sed:
seq 1 10 | sed '2,+3!d'
输出:
2 3 4 5
来自man sed
:
addr1,+N
: Will match addr1 and the N lines following addr1.