打印登录unix开始文本

时间:2015-12-21 20:15:44

标签: 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]
...

2 个答案:

答案 0 :(得分:1)

您可以使用一个简短的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参数设置为非零值时,打印当前行。
  3. 这意味着从找到第一次出现的模式开始,它将打印所有行。

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

答案 1 :(得分:0)

如果你知道开始和结束标记的具体格式,你可以使用awk来实现你所需要的:

cat > test-file
hear no evil
no evil here
start see no evil
know no evil
no evil known here
end see no evil
no know evil
^D

仅显示'开始看见无邪恶'和'看不见邪恶'之间的界限

cat test-file | awk  -e '/start/,/end/ {print}'

产生以下输出

start see no evil
know no evil
no evil known here
end see no evil