UNIX SHELL: Kilka wskazówek, jak poprawić wydajność skryptów UNIX

Sed i AWK domyślnie czytają całe pliki

Wyobraź sobie, że masz kilkugigabajtowy plik wejściowy subor.txt, w którym chcesz wypisać pierwsze 4 linie. W wyniku domyślnego czytania przez sed całych plików uzyskujemy bardzo słabą wydajność skryptu:

$ sed -n '1.4p' plik.txt

Zamiast tego powinniśmy zatrzymać program sed natychmiast po przeczytaniu pierwszych dwóch linii. Prezentuję rozwiązania zarówno dla sed , jak i awk:

$ sed '4q' subor.txt
$ awk 'NR==5{exit;}1' subor.txt

Preferuj polecenia wewnętrzne

UNIX SHELL to język skryptowy. Jest to jednak język interpretowany, więc preferuj wbudowane polecenia. Polecenia wewnętrzne (np. echo) to polecenia, które SHELL wykonuje bez tworzenia wątku, natomiast wykonanie poleceń zewnętrznych (np. expr) tworzy obsługę SHELL.

Lepsza praca z plikami

Powłoka UNIX świetnie współpracuje z plikami. Nie ma jednak potrzeby nadużywania tego poprzez niepotrzebne stopniowe przypisywanie danych do dużego pliku. Np. cykl

podczas gdy [warunek]
wykonaj
echo x >> subor.txt
gotowe

można zastąpić

podczas gdy [warunek]
wykonaj
echo x
gotowe > subor.txt

co pozwala zaoszczędzić znaczną ilość pieniędzy. Zamiast wykonywania instrukcji n razy, zostanie ona wykonana tylko raz na końcu pętli while.

W pętlach używaj tylko niezbędnych instrukcji

Oznacza to, że wszelkie instrukcje, które mogą wyjść poza pętlę, nie zostaną użyte w żadnym miejscu pętli. Wyobraź sobie, że sprawdzasz datę. Datę należy obliczyć wcześniej w trakcie działania skryptu i nie należy jej obliczać w trakcie działania skryptu.

Marián Knězek