두 타임스탬프 사이의 로그를 추출하는 방법, 행은 날짜/시간으로 시작할 수도 있고 시작하지 않을 수도 있습니다. 아래에서 시도했는데 날짜/시간으로 시작하는 행만 추출합니다. 날짜 시간 형식은 다음과 같습니다.2014-04-07 23:00
$ awk \
'$0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]/
{
if ($1" "$2 >= "2014-04-07 23:00") p=1;
if ($1" "$2 >= "2014-04-08 02:00") p=0;
}
p { print $0 }' log
내 샘플 데이터는 다음과 같습니다.
2014-04-07 22:59:10.001 agaggagag
gagagg
2014-04-07 23:40:33.345 aegsgssdh
wqtqttqtqtq
post
agggsdgg
2014-04-08 01:00:54.777 ggsdgwettwetewt
cvdgwetegdkiytitityi
error
2014-04-08 02:02:22.009 qwwqtwtwebbcbewdhshsdh
asgsaftewtewt
1253536443755475
2014-04-08 10:55:34.934 etwtewtewppip
jklhlljkjvncncmmm
sghywywywywyw
2014-04-07 23:00
와 사이의 모든 데이터를 추출하고 싶습니다 .2014-04-08 02:00
답변1
패턴 일치에서 RE의 시작 부분은 ^
표현식을 줄의 시작 부분에 바인딩합니다. 표현식이 어디든 일치하도록 하려면 해당 표현식을 제거해야 합니다.
귀하의 if...
진술에서는 날짜/시간 필드가 $1
및 에 있다고 가정합니다 $2
. 이는 정의에 따라 반드시 사실이 아닐 수도 있습니다. 이것을 시도해 보십시오(귀하의 데이터 샘플이 없기 때문에 테스트되지 않았습니다).
awk '
{
if (match($0, /\<[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]\>/))
{
s = substr($0, RSTART, RLENGTH)
if (s >= "2014-04-07 23:00") p=1
if (s >= "2014-04-08 02:00") p=0
}
}
p { print $0 }
' log
샘플 데이터 출력
2014-04-07 23:40:33.345 aegsgssdh
wqtqttqtqtq
post
agggsdgg
2014-04-08 01:00:54.777 ggsdgwettwetewt
cvdgwetegdkiytitityi
error
답변2
스크립트의 시작 부분을 다음으로 변경하십시오.
$awk\ '$0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0- 9]/\ { ︙
또는
$awk\ '$0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0- 9]/{ ︙
현재 스크립트에는 세 가지 문이 있습니다.
- 행이 일치하면
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]/
인쇄합니다(기본 동작). - 모든 행(기본 조건)에 대해
p
범위 내에 있으면 1로 설정되고$1 $2
, 범위 내에 없으면 0으로 설정됩니다. p
0이 아닌 경우 해당 행을 인쇄합니다.
그래서모든날짜 타임스탬프(정규식 기반)처럼 보이는 줄은 명령문 1을 기반으로 인쇄됩니다. 날짜 타임스탬프가 포함된 선택 항목 내의 각 행은 문 2와 3 사이의 상호 작용을 기반으로 인쇄됩니다.
분명히 조건 1과 명령문 2를 함께 바인딩하려고 합니다.
답변3
귀하의 목적에 맞게 간단한 스크립트를 만들었습니다. 이것이 도움이 되는지 확인하세요.
[upkar@server2 一]# 고양이 logxtract.sh
L1=$(grep -n "2014-04-07 23:[0-9][0-9]" 로그 | awk -F":" '{print $1}')
L2=$(grep -n "2014-04-08 02:[0-9][0-9]" 로그 | awk -F":" '{print $1}')
sed -n $L1,"$L2"p 로그
스크립트 출력
[upkar@server2 一]#sh logxtract.sh
2014-04-07 23:40:33.345 aegsgssdh
wqtqttqtqtq
post
agggsdgg
2014-04-08 01:00:54.777 ggsdgwettwetewt
cvdgwetegdkiytitityi
error
2014-04-08 02:02:22.009 qwwqtwtwebbcbewdhshsdh