타임스탬프를 기반으로 로그 파일을 잘라내기 위해 awk와 변수를 사용하고 있습니다.
LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ;
날짜가 로그 파일에 여전히 있으면 작동하지만 awk
로그 파일이 보관되어 새 파일로 교체되면 실패합니다.
cat $log_file
실패 하면 awk
다음으로 대체하고 싶습니다.
LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ; \
|| cat $log_file
하지만 이 구문은 syntax error near unexpected token ||
.
위 라인은 나중에 사용하거나 사용할 &&
수 있는 정상적인 기능이 아닌가요 ?||
답변1
문제 ; ||
는
LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ; || cat $log_file
;
호출을 종료하면 awk
다음 명령이 로 시작하는데 ||
이는 구문 오류입니다.
당신이 원하는 것은 y
로그 파일 구문 분석이 끝날 때 1이 아닌지 확인하는 것입니다. 이 경우 make는 awk
0이 아닌 종료 상태를 반환합니다.
LAST_LOG="$last_log" awk '
index($0, ENVIRON["LAST_LOG"]) { y = 1; next }
y { print }
END { exit !y }' <"$log_file" || cat <"$log_file"
명시적이지 않으면 exit
어떤 종류의 오류가 발생하면 0이 아닌 종료 상태를 얻게 됩니다.awk
답변2
의견을 보면 PO 명령을 수정/조정하는 방법이 분명합니다. 약간 다른 gnu-Awk 접근 방식을 사용합니다.
awk -v L=$last '$0 ~ L {y=1;next};y; END{if(!y) system("cat " FILENAME)}' $log
- 어쩌면 조건이
$0 ~ L
더 구체적일 수도 있습니다(예:$1 <= L
또는$1 == L
).