2015-12-21 50 views
0

我有一個巨大的日誌文件,我想從文本複製日誌到我的本地目錄。打印登錄unix開始文本

日誌文件名

'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] 
... 

回答

1

您可以使用它打印輸入短awk程序從它發現的模式開始:

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

注意:這是一個單個命令,但它由兩行組成。如果在引用字符串中間按回車鍵,bash會給你一個次要提示,你可以繼續到命令的下一行,當然你需要關閉引用。

zcat解壓縮文件,其輸出是awk命令的輸入。

awk的腳本是指:

  1. 噹噹前行中的給定的模式相匹配(在這種情況下2665941),當PRINTLOG參數設置爲非零的東西設置printLog參數爲1。
  2. ,打印當前行。

這意味着從找到模式的第一個出現的那一刻起,它將打印所有行。

最後,awk輸出重定向到您請求的文件。

+0

抱歉,我無法使用ZCAT,zgrep等它是在網絡管理的我也沒有權限使用外部程序。 – logger

+0

@ user3659052但你使用gzgrep ...你在說什麼外部程序? – RealSkeptic

+0

實際上這個工作。只是不得不改變ZCAT到gzcat – logger

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 
+0

這個我知道,但問題是當有更多的線條可以放入你的屏幕,並且當管理員清除緩存框時,你不能導出以便稍後在文本文件中檢查日誌 – logger