打印文件第 n 行的最短、最易读的方法是什么?

打印文件第 n 行的最短、最易读的方法是什么?

它是关于 Unix 和 Linux 的。

是的,有很多解决方案,例如http://mywiki.wooledge.org/BashFAQ/011。其中一些非常快(不读取整个文件),而有些虽然慢,但很短且更易读。我对一种适用于小于 1MB 的小文件的解决方案感兴趣,这种解决方案易于记忆且易于阅读,并且应该在 1 秒内完成。当然我可以编写脚本或 shell 别名,但是当我使用新安装的计算机时,我必须先重新建立我的环境,因此我更喜欢一种开箱即用的解决方案,适用于大多数 Unix 和 Linux Distris,或者至少在通过包管理安装所需工具后。有人能打败这个吗?:

 awk NR==42 file

答案1

和解决方案awkperl缺点是它们在打印完第 N 行后会继续读取。yes可以使用打印无限多行的命令来测试这一点。

解决此问题的一个简短解决方案是:

 sed -n 42p file

打印完下面这一行后程序退出:

sed -n '42{p;q}' file

答案2

只要有头尾命令

这将打印文件 abc 的第 12 行。保留 tail -n 1,并将 12 更改为要打印的任何行号。

$ head -n 12 abc | tail -n 1

如果您愿意通过包管理安装工具,那么您应该愿意使用您编写的脚本,而且我猜也许您所有的 linux 和 unix 发行版都有 head 和 tail 命令。但如果没有,则安装它们,或者安装 awk 或 perl,当然,无论您使用什么,只要系统有该工具,无论是 head 和 tail、awk 还是 perl,在任何系统上都可以同样工作。

答案3

我认为在简洁性和可读性方面我无法超越您的 AWK 示例,但这是一个 Perl 示例

  perl -ne 'print if $. == 42' file

答案4

您可以使用sed。在下面的命令中,-n选项禁用打印每一行,因此只p执行显式打印(命令)。12匹配第 12 行并且 p 发出打印。

sed -n '12 p'

相关内容