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