다음 명령을 사용하여 현재 날짜의 기간을 추출하고 다음과 같은 특정 메시지에 대해 grep을 시도했습니다.
awk -v date="$(date +%Y%m%d')" '$1="date" && $3>"180000" && $3<"192000"' /app/exploit/log/FILE_send.log | grep "End success file transfer /app/reception/FILENAME.dat to HOSTX"
하지만 첫 번째 날짜 열을 기준으로 필터링할 수는 없습니다. 다음은 awk 명령에서 변수를 제거하고 $1=20190405에 날짜를 지정할 때 awk 명령의 출력입니다.
1 - 180050 | INFO | FILE_SEND.sh | | FILENAME.dat | 1800498307000 | End success file transfer /app/reception/FILENAME.dat to HOSTX
로그의 내용은 다음과 같습니다.
20190405 - 180050 | INFO | FILE_SEND.sh | | FILENAME.dat | 1800498307000 | End success file transfer /app/reception/FILENAME.dat to HOSTX
열이 1로 대체되는 이유를 알 수 없습니다. 오늘의 첫 번째 열을 필터링하는 방법
답변1
다음 명령을 사용할 수 있습니다.
awk -F'[-|]' -v date="20190405" '$1 == date && $2>180000 && $2<192000' file_name | grep "End success file transfer /app/reception/FILENAME.dat to HOSTX"
명령의 출력은 awk
다음과 같습니다.
20190405 - 180050 | INFO | FILE_SEND.sh | | FILENAME.dat | 1800498307000 | End success file transfer /app/reception/FILENAME.dat to HOSTX
가변 날짜 사용:
awk -F'[-|]' -v date="$(date +%Y%m%d)" '$1 == date && $2>180000 && $2<192000' filename