我有一个巨大的日志文件,我想将一个从文本开始的日志复制到我的本地目录。
日志文件名
'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 脚本意味着:
- 当当前行与给定模式匹配时(在本例中为
2665941
),将printLog
参数设置为 1。 - 当 printLog 参数设置为非零值时,打印当前行。
这意味着从它找到第一个模式出现的那一刻起,它将打印所有行。
最后,awk
的输出被重定向到您请求的文件。
关于linux - 在 unix 中打印日志起始文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34403651/