대용량 파일이 있는데 날짜와 시간을 사용하여 찾아봐야 합니다. 파일의 각 줄에는 날짜와 시간이 있습니다.
여러 행을 검색하여 두 개의 특정 날짜와 시간 사이에 있는 행을 가져와야 합니다.
예제 파일(날짜 및 시간 필드 $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
유일한 실제 문제는 $AAA
and $BBB
대신 AAA
and 에 할당한다는 것입니다 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
답변3
awk
최고의 도구는 아닙니다.
sed -e "/^$AAA/,/^$BBB/,p" file.txt
그리고 man sed
.