fedorqui Asked: 2020-12-02 12:17:56 +0800 CST 2020-12-02 12:17:56 +0800 CST 2020-12-02 12:17:56 +0800 CST 如何打印文件的第 n 行? 772 假设我有一个archivo包含很多行的文件,但我只想打印一个特定的行,比如 number n。 如何使用标准 Linux 系统上的工具来实现这一点?这个选项head XX archivo | tail -N对我来说似乎不切实际。 bash 4 Answers Voted Best Answer Gilles 'SO- stop being evil' 2020-12-02T17:42:11+08:002020-12-02T17:42:11+08:00 容易写: sed -n 123456p 更快,特别是如果该行不在末尾附近: sed '123456q; d' 快一点,至少如果文件很大(基准): tail -n +123457 | head -n 1 head … | tail …它要慢得多,因为前 123465 行通过管道。 César 2020-12-02T12:21:22+08:002020-12-02T12:21:22+08:00 sed您可以使用(流编辑器)命令执行此操作: sed 'LINEAq;d' file 例子: $ cat hello.go package main import ( "fmt" ) func main() { fmt.Printf("hello, world\n") } 打印第一行: $ sed '1q;d' hello.go package main} 打印第七行: $ sed '7q;d' hello.go func main() { 有关 的更多信息sed,您可以访问官方GNU 文档。 fedorqui 2020-12-02T12:20:37+08:002020-12-02T12:20:37+08:00 我有几个选择。 我们awk可以说: awk 'NR==n' archivo 如果数字包含在变量$numero中,我们可以说: awk -v linea="$numero" 'NR==linea' archivo 由于NR它指的是在给定时刻正在读取的行,因此我们只需将其值与我们通过 分配给它的变量的值进行比较-v linea="n"。例如,-v linea=5。 如果事实证明文件非常非常大,我们总是可以在打印该行后退出,以免不必要地继续读取它: awk 'NR==linea {print; exit}' archivo 如果我们更喜欢使用sed,我们可以说: sed -n 'Np' archivo 对于大文件: sed -n 'N{p;q;}' archivo 这将打印行号N,然后停止执行。 如果值在变量中,我们必须使用双引号,以便扩展值,${n}以便理解变量的名称是$n而不是$np: sed -n "${n}p" archivo Hewbot 2020-12-02T12:21:22+08:002020-12-02T12:21:22+08:00 head对于非常大的文件,pipewith会很慢。tail我建议sed像这样使用它: sed 'NUMq;d' archivo NUM您要打印的行号在哪里。 字体
容易写:
更快,特别是如果该行不在末尾附近:
快一点,至少如果文件很大(基准):
head … | tail …
它要慢得多,因为前 123465 行通过管道。sed
您可以使用(流编辑器)命令执行此操作:例子:
打印第一行:
打印第七行:
有关 的更多信息
sed
,您可以访问官方GNU 文档。我有几个选择。
我们
awk
可以说:如果数字包含在变量
$numero
中,我们可以说:由于
NR
它指的是在给定时刻正在读取的行,因此我们只需将其值与我们通过 分配给它的变量的值进行比较-v linea="n"
。例如,-v linea=5
。如果事实证明文件非常非常大,我们总是可以在打印该行后退出,以免不必要地继续读取它:
如果我们更喜欢使用
sed
,我们可以说:对于大文件:
这将打印行号
N
,然后停止执行。如果值在变量中,我们必须使用双引号,以便扩展值,
${n}
以便理解变量的名称是$n
而不是$np
:head
对于非常大的文件,pipe
with会很慢。tail
我建议sed
像这样使用它:NUM
您要打印的行号在哪里。字体