2017-10-12 79 views
0

我有一個日誌文件包含所有信息。如何使用bash中的parametres從文件中提取行

2017-09-21 02:01:11,130 [http-nio-8080-exec-5] INFO - Inbound Message 
... 
... 
2017-09-21 09:01:11,130 [http-nio-8080-exec-5] INFO - Inbound Message 
---------------------------- 
ID: 6044 
Address: http://localhost/serveur/Service?wsdl 
Encoding: UTF-8 
Http-Method: POST 
... 
2017-09-21 12:01:11,130 [http-nio-8080-exec-5] INFO - Inbound Message 
... 

我想只提取2個日期之間的信息。對於爲例,如果我想2017年9月21日09 ..和2017年9月21日12之間的信息我想有這樣的事情:

./script.sh 2017-09-21 09 2017-09-21 12 
# $1 = 2017-09-21 
# $2 = 09 
# $3 = 2017-09-21 
# $4 = 12 
# $1 & 2 are date and hour to begin extract 
# $3 & 4 are date and hour to finish extract 

我的劇本是這樣的。我沒有shell編程知識,但我試圖做到這一點。不幸的是它不起作用

#!/bin/bash 

beginLine = "$1 $2" 
finishLine = "$3 $4" 

while read fileLog.log 
do 
    if($fileLog.log grep beginLine) 
     echo $fileLog.log >> extractedlog.log 
    fi 
    if($fileLog.log grep finishLine) 
     < extractedLog.log; 
    fi 
done 
exit 0; 

有誰能告訴我問題在哪裏?

+0

這不是'bash'語法 – hek2mgl

回答

2
$ awk '/2017-09-21 09/{a=1};a;/2017-09-21 12/{exit}' input 
2017-09-21 09:01:11,130 [http-nio-8080-exec-5] INFO - Inbound Message 
---------------------------- 
ID: 6044 
Address: http://localhost/serveur/Service?wsdl 
Encoding: UTF-8 
Http-Method: POST 
... 
2017-09-21 12:01:11,130 [http-nio-8080-exec-5] INFO - Inbound Message 

更多替代發現here

2

sed的方法(匹配/.../,/.../的範圍的圖案):

sed -n '/2017-09-21 09/,/2017-09-21 12/p' logfile 

----------

同樣可以用awk(甚至更短):

awk '/2017-09-21 09/,/2017-09-21 12/' logfile 
+0

而放棄匹配2017年9月21日12我應該使用/ q是之後的過程? – Chinovski

+0

@Chinovski,不,在這種情況下。 'q'不應該在這裏添加 – RomanPerekhrest

+0

@tripleee,所有擴展的情況都應該在問題中進行描述和闡述。任何人都可以創造越來越多的擴展條件 – RomanPerekhrest

相關問題