로그에서 경고를 찾아야 하며 grep 및 awk(아래 코드)를 사용하고 있습니다. 그러나 VM(Ubuntu 18.04)에서 처음으로 모든 스크립트를 실행했을 때 약 120초(24.5GB 로그)가 걸렸고, Ubuntu 콘솔을 사용하여 Win 10에서 실행을 시도했는데 20초가 걸렸습니다. 왜요?). 그런 다음 코드를 일부 변경하고 실행하는 데 약 500초가 걸렸습니다. (내가 만든 것은 모두 변경 사항이었습니다. grep -v ".tmp" folder/.
) grep -vF "~$" folder/.
그 후 다시 변경해 보았지만 속도는 동일했습니다 ~ 500초. 또한 Cygwin을 사용하여 Win 10에서 동일한 스크립트를 실행해 보았는데 결과는 ~400초였습니다. 왜 이런 일이 발생하는지 설명할 수 있나요? Win에서 실행 속도가 빨라지는 이유는 무엇이며, 상황에 따라(20초, 400초, 500초) 변동하는 이유는 무엇입니까? (예, 제 코드가 형편없다는 걸 알지만 앞으로는 필터 수가 늘어나고 IMHO 스크립트를 확장하기 어려울 것이라고 가정합니다.) 스크립트 최적화에 대한 제안 사항이 있으면 조언이나 의견을 환영합니다. (bash 스크립트를 사용하는 것은 이번이 처음입니다.)
#!/bin/bash
start=`date +%s`
clear
rm /Users/me/Desktop/Errors/*
echo "Hello"
grep -nr "Error" . | gawk -F" " '$4 ~ /Error/' | grep -v "@Trash"| grep -v "Cien" | grep -Fv "~$" | grep "\\\\server" | grep -v "Folder1" | grep "Object is being used" > /Users/me/Desktop/Errors/OU_Other.txt
gr=`grep -c "Error" /Users/me/Desktop/Errors/OU_Other.txt`
echo "OU_Other done with $gr errors"
grep -nr "Error" . | gawk -F" " '$4 ~ /Error/' | grep -v "@Trash"| grep -v "Cien" | grep -Fv "~$" | grep "\\\\server" | grep "Folder1" |
grep "Object being is used" > /Users/me/Desktop/Errors/OU_Cien.txt
gr=`grep -c "Error" /Users/me/Desktop/Errors/OU_Cien.txt`
echo "OU_Cien done with $gr errors"
grep -nr "Error" . | gawk -F" " '$4 ~ /Error/' | grep -v "@Trash"| grep -Fv "~$" | grep "\\\\server" | grep -v "Access is denied" | grep -v "Object is being used" | grep -v "Cannot enumerate" > /Users/me/Desktop/Errors/Other.txt
gr=`grep -c "Error" /Users/me/Desktop/Errors/Other.txt`
echo "Other done with $gr errors"
end=`date +%s`
runtime=$((end-start))
echo "Runtime: $runtime sec"
ls -l /Users/me/Desktop/Errors/
답변1
속도에 대한 고민을 간략히 답변드리자면,
Windows에서의 배쉬Windows 커널에 직접 연결모든 시스템 호출과 다양한 실행 파일 형식을 처리합니다. 리버스 와인이라고 생각하세요. Linux 애플리케이션의 성능을 위해 특별히 설계된 더 적은 수의 추상화 계층과 내장 시스템에 의존하기 때문에 더 빠릅니다.
반면 Cygwin을 사용하면 POSIX(y) 소프트웨어를 컴파일하여 Windows에서 .exe로 직접 실행할 수 있습니다. 이것은 다른 목표이자 더 부담스러운 목표입니다. 왜냐하면 때로는 Windows 커널에 직접 맵이 없는 다양한 외부 시스템 호출에 대한 1:1 호환성을 제공하기 위해 노력해야 하기 때문입니다.
가상 머신은 전체 시스템을 에뮬레이트하며, 특히 I/O 집약적인 상황에서는 이전 두 옵션보다 일반적으로 속도가 느립니다. 단, 가상 머신은 시간이 지남에 따라 성능이 향상됩니다. 가상 머신을 조정하는 방법에 대한 자세한 내용은 가상 머신 설명서를 참조하세요. (예)
속도에 관심이 있다면 컴퓨터에 Linux를 직접 설치하는 것을 강력히 고려해야 합니다. 시도한 어떤 옵션보다 훨씬 빠르게 수행된다는 것을 알 수 있습니다.
주석에서 이미 지적했듯이, 스크립트를 다시 작성하면 스크립트의 성능이 전반적으로 크게 향상될 것입니다. 가급적 불필요한 연속 작업 grep
과 awk
호출을 많이 하지 않는 것이 좋습니다.