我有一个巨大的日志文件,我想将从文本开始的日志复制到我的本地目录。
日志文件名
'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]
...
答案 0 :(得分:1)
您可以使用一个简短的awk程序,从找到模式的位置打印输入:
zcat cktrm.ecg-2015-12-21.gz | awk "/2665941/ {printLog = 1}
printLog { print }" > ~/log.txt
注意:这是单个命令,但它由两行组成。如果你在一个带引号的字符串中间按Enter键bash会给你一个辅助提示,你就可以继续执行命令的下一行了,你当然需要关闭这个引号
zcat
解压缩文件,其输出是awk命令的输入。
awk脚本意味着:
2665941
),请将printLog
参数设置为1. 这意味着从找到第一次出现的模式开始,它将打印所有行。
最后,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