내가 다음 스크립트를 작성했다고 가정해 보겠습니다.
#print_time..
cat <file1.txt> | grep "*.log" | head -4 | tail -2 | helper | sort -r -n -k2
#helper..
while read line; do
linearr=($line)
(( time =${line[2]} - ${line[1]} +0 ))
echo ${line[o]} $time
done
두 가지 질문: 1) 왜 첫 번째 스크립트가 다음과 같이 작성할 때만 예상대로 작동하는지:
cat `cat <file1.txt> | grep "*.log" | head -4 | tail -2` helper | sort -r -n -k2
2) grep "*.log"
".log"를 사용해야 합니까, 아니면 grep을 사용해야 합니까?
스크립트의 기능:
file1이 주어지면 마지막 로그 파일이 주어진 file1에 있는 모든 .log 파일 중 번호 4인 경우 2개의 로그 파일만 읽으려고 합니다. 예:
나는 스크립트의 첫 번째 부분인 tuesday.log 및 wednesday.log를 읽고 그 다음에는 로그 파일에 이름이 있는 모든 사람의 모든 로그 시간을 계산하기를 원합니다.
그러면 다음과 같이 인쇄됩니다.
답변1
귀하의 질문에 대답하자면 문제는 grep
.
Grep은 입력한 내용을 리터럴로 취하므로 으로 grep을 실행하면 문자 별표 와 뒤에 *.log
오는 문자를 적극적으로 검색하므로 아무 것도 찾을 수 없습니다.*
.log
빠른 테스트로는,
이 명령은 echo hello.log | grep "*.log"
아무것도 반환하지 않습니다.
이 명령은 echo hello.log | grep ".log"
다음 줄을 반환합니다.