나는 Redhat Linux 서버 8.8에서 이 명령을 직접 사용하고 있으며 잘 작동하며 원하는 결과를 얻습니다.
grep '01-FEB-2024' /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }'
Bash 파일을 사용하여 이 프로세스를 자동화해야 하는데 current_date 변수의 값을 가져오지 못하는 것 같습니다.
#!/bin/bash
current_date=$(date "+%d-%b-%Y")
grep '$current_date' /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
grep "$current_date" /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
grep $current_date /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
이 모든 경우에는 null을 반환합니다. 미리 감사드립니다.
답변1
date +%d-%b-%Y
날짜를 0부터 길이 2까지 패딩하고, 연도를 0부터 4자리까지 패딩하여 현재 날짜를 출력합니다.
명령을 실행하는 사람에 따라 다음과 유사한 결과를 얻을 수 있습니다.
06-فبر-2024
06-лют-2024
06-fév-2024
C/POSIX 로케일에서는 다음을 얻습니다.
$ LC_ALL=C date +%d-%b-%Y
06-Feb-2024
로그에 동일한 내용이 포함되어 있지만 대문자인 것 같습니다.
여기에서 다음을 수행할 수 있습니다.
#! /bin/sh -
TODAY=$(LC_ALL=C date +%d-%b-%Y) exec awk '
BEGIN{today = toupper(ENVIRON["TODAY"])}
index($0, today) && $NF != 0
' /u01/app/server1/listener_scan/trace/listener_scan.log
mawk
, busybox는 이 정보를 자체적으로 얻을 awk
수 있으므로 gawk
Linux 기반 시스템에서도 작동할 가능성이 높습니다.
#! /bin/sh -
LC_ALL=C exec awk '
BEGIN {today = toupper(strftime("%d-%b-%F"))}
index($0, today) && $NF != 0
' /u01/app/server1/listener_scan/trace/listener_scan.log
(이는 로그 파일 내용이 텍스트로 디코딩되는 방식에도 영향을 주지만 아마도 최선일 것입니다. 이는 오류 메시지의 언어에도 영향을 미칩니다.)
답변2
나는 무엇을 할 것인가:
#!/bin/bash
current_date=$(date "+%d-%b-%Y")
grep -i "$current_date" /u01/app/server1/listener_scan/trace/listener_scan.log |
awk '{ if ( $NF != 0 ) print $0 }' >> y.out
쉘에서 올바르게 인용하는 방법을 배우는 것은 매우 중요합니다.
공백/메타 문자를 포함하는 모든 리터럴은 "큰따옴표"로 처리합니다.모든확장:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
.'single quotes'
코드나 텍스트$'s: 'Costs $5 US'
에 대해서는ssh host 'echo "$HOSTNAME"'
을 참조하십시오.
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
https://web.archive.org/web/20230224010517/https://wiki.bash-hackers.org/syntax/words
언제 큰따옴표가 필요합니까?
답변3
명령이 반환하는 06-FEB-2024
주석에 언급된 대로 와 같은 패턴을 일치시켜야 합니다 .date
06-Feb-2024
변수를 대문자로 표시할 수 있습니다.
current_date=$(LC_ALL=C date "+%d-%b-%Y")
grep "${current_date^^}" /u01/app/server1/listener_scan/trace/listener_scan.log |
awk '{ if ( $NF != 0 ) print $0 }' >> y.out
다음과 같이 조합을 결합할 수도 있습니다.
awk -v date="$(LC_ALL=C date +'%d-%b-%Y')" '$0 ~ toupper(date) && $NF!=0' /u01/app/server1/listener_scan/trace/listener_scan.log >>y.out