linux - 在 unix 中打印日志起始文本

标签 linux unix logging grep

我有一个巨大的日志文件,我想将一个从文本开始的日志复制到我的本地目录。

日志文件名

'cktrm.ecg-2015-12-21.gz'

我运行的命令是

bash-3.2$ gzgrep '2665941' cktrm.ecg-2015-12-21.gz > ~/log.txt

但这只会将包含 2665941 的所有行复制到文本文件中。

我需要的是从该文本开始复制到文件末尾。

例如:

...
log.info [id = 2665941]
log.debug ....
log.debug ...
log.debug [add to id 2665941]
...

当前打印到文本文件的是什么

log.info [id = 2665941]
log.debug [add to id 2665941]

我需要的是

log.info [id = 2665941]
log.debug ....
log.debug ...
log.debug [add to id 2665941]
...

最佳答案

您可以使用一个简短的 awk 程序,从找到模式的地方开始打印其输入:

zcat cktrm.ecg-2015-12-21.gz | awk "/2665941/ {printLog = 1}
printLog { print }" > ~/log.txt

注意:这是一个单个命令,但它由两行组成。如果在带引号的字符串中间按 Enter,bash 会给您第二个提示,您将能够继续命令的下一行,当然您需要在该行结束引号。

zcat 解压缩您的文件,其输出是 awk 命令的输入。

awk 脚本意味着:

  1. 当当前行与给定模式匹配时(在本例中为 2665941),将 printLog 参数设置为 1。
  2. 当 printLog 参数设置为非零值时,打印当前行。

这意味着从它找到第一个模式出现的那一刻起,它将打印所有行。

最后,awk 的输出被重定向到您请求的文件。

关于linux - 在 unix 中打印日志起始文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34403651/

相关文章:

linux - zsh:如何在不删除文件夹的情况下删除文件夹中的内容?

linux - 为什么结束时间与此 shell 脚本中的开始时间相同?

java - -Djava.library.path 是否适用于 UNIX JVM?

C - UNIX - 检查 getpriority() 是否返回错误

c - 在 C 中实现多个管道时遇到问题

logging - 何时使用不同的日志级别

java - log4j 日志文件排除日志消息

testing - 如何在 TestCafe 框架中启用测试日志记录机制

linux - 在用户空间中读取 Intel Xeon 的性能计数器

linux - Bash:仅允许脚本通过从另一个脚本调用来运行