bash查看文件开头和结尾的方法

Mad*_*per 8 bash text-processing

在基于队列的集群上,挂起作业的队列通过命令显示,例如showqueue

该命令在列中返回合理数据的列表,如名称等,但列/数据对于问题并不重要。

我喜欢使用的工具watch一样watch showqueue,有时(有一个别名alias watch="watch ",以力别名扩展我的命令来观看)。前几行有有价值的数据(正在运行的作业),然后是待处理的作业等,最后还有一些有价值的摘要。

但是,有时 showqueue 的输出会从屏幕上消失(难以置信,我知道)!理想情况下,我希望能够同时查看文件的开头和结尾。

到目前为止我拥有的最好的是:showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2,并使用watch它的别名。

有谁知道任何更灵活或单一实用程序的东西?我的解决方案使用 bash 循环变得有点讨厌,使“...”中断多行,它根本不适应调整终端窗口的大小,而且我确定还有更多我错过的。

有什么建议?

Tim*_*iam 14

您是否想做以下事情?显示头部和尾部的输出。

$ showqueue | (head && tail)
Run Code Online (Sandbox Code Playgroud)

  • `head` 的_某些_实现可能会读取 10 多行并且没有留下任何内容供 `tail` 读取。该实用程序不_应该_这样做,我相信 GNU 工具在这方面表现良好。使用`头; 回声'...'; tail` 也可以将点放在那里。 (6认同)
  • @Kusalananda,不,在我的系统上,GNU 头(coreutils 8.26)读取 8192 字节的块。它确实_尝试_寻找回来,但显然不能在管道的情况下。尽管无论如何,真的有要求“头”不要过度阅读吗?(在 Mac 上一样,它似乎是按块读取的) (4认同)
  • @Kusalananda,POSIX 允许实现在输入不可搜索时执行此操作,并且大多数实现都可以。不这样做将意味着一次读取一个字节,这将非常低效(或者将数据放回支持的管道上,这会导致各种不同的问题)。我所知道的唯一一次读取一个字节以避免读取超过第 10 个换行符的 `head` 实现是 ksh93 的内置 `head`。 (3认同)
  • @ilkkachu 是的,即使它站立,即使输出足够长,尾部偶尔也会是空白的(我知道,因为我使用的是 head -n 35,而且已经满了),但幸运的是,这只是方便观看,我可以等待 3如果需要,几秒钟刷新一次。 (2认同)