파일에서 두 타임스탬프 사이의 줄 가져오기

파일에서 두 타임스탬프 사이의 줄 가져오기

대용량 파일이 있는데 날짜와 시간을 사용하여 찾아봐야 합니다. 파일의 각 줄에는 날짜와 시간이 있습니다.

여러 행을 검색하여 두 개의 특정 날짜와 시간 사이에 있는 행을 가져와야 합니다.

예제 파일(날짜 및 시간 필드 $2 및 $3):

SERVER 2015-12-12 05:00:20 some_text_here something  
SERVER 2015-11-02 12:22:40 some_text_here something
SERVER 2015-12-11 20:00:00 some_text_here something
SERVER 2015-12-11 23:00:00 some_text_here something
SERVER 2015-12-12 00:30:00 some_text_here something
SERVER 2015-12-12 00:59:00 some_text_here something
SERVER 2015-09-20 03:28:11 some_text_here something
SERVER 2015-04-16 04:49:59 some_text_here something

내가 시도한 명령(사용자는 스크립트를 실행할 때 4개의 매개변수를 제공해야 함):

AAA="$1 $2"
BBB="$3 $4"

awk '$2" "$3>="'"$AAA"'" && $2" "$3<="'"$BBB"'"' file.txt > newfile.txt

위 줄을 스크립트로 사용하고 있지만 작동하지 않습니다.

newfile.txt다음을 포함해야 합니다(매개변수 포함 2015-12-11 20:00:00 2015-12-12 01:00:00):

SERVER 2015-12-11 20:00:00 some_text_here something
SERVER 2015-12-11 23:00:00 some_text_here something
SERVER 2015-12-12 00:30:00 some_text_here something
SERVER 2015-12-12 00:59:00 some_text_here something

답변1

유일한 실제 문제는 $AAAand $BBB대신 AAAand 에 할당한다는 것입니다 BBB. 따라서 이렇게 하면(코드와 거의 동일):

AAA="2015-12-11 20:00:00"
BBB="2015-12-12 01:00:00"
awk '$2" "$3>="'"$AAA"'" && $2" "$3<="'"$BBB"'"' file.txt > newfile.txt

이미 작동하고 있을 것입니다. 그러나 잠재적인 인용 문제를 줄이기 위해 다음과 같은 추가 변경을 권장합니다(특히 이 방법을 다른 곳에서 재사용하거나 또는에 특수 문자를 입력하는 경우 AAA) BBB.

AAA="2015-12-11 20:00:00"
BBB="2015-12-12 01:00:00"
awk -v string1="$AAA" -v string2="$BBB" '$2" "$3>=string1 && $2" "$3<=string2' file.txt > newfile.txt

-v이에 대한 내용은 매뉴얼 페이지에서 읽을 수 있습니다 awk.

답변2

두 개의 특정 날짜와 시간을 입력할 수 있는 스크립트가 필요할 수도 있습니다. 여기에 이미지 설명을 입력하세요.

암호:

#!/bin/bash
if [ $# -ne 4 ];then
exit 0
fi
AAA=$1" "$2
BBB=$3" "$4
awk -v begintime="${AAA}" -v endtime="${BBB}" '$2" "$3>=begintime && $2" "$3<=endtime' exa > newfile.txt

답변3

awk최고의 도구는 아닙니다.

sed -e  "/^$AAA/,/^$BBB/,p" file.txt

그리고 man sed.

관련 정보