Звіт про виконання практичного завдання з курсу ДРФМД
Приклади роботи з системою UNIX
1.Скопіювати усі текстові файли (з розширеням .txt) в каталог TextDir
cp *.txt TextDir
2.Дозволити читання усіх файлів каталогу AccessDir заданих шаблоном.
UNIX-скріпт в файлі changeaccess виглядає таким чином:
cd AccessDir
chmod +r $1
cd ..
Приклад виклику: changeaccess “m*.*” – дозволяє читання усіх файлів, що
починаються буквою m. Шаблон обов’язково вказується у лапках.
3.Приклад з мовою awk. Потрібно розв’язати квадратні рівняння типу
Ax2 + Bx + C = 0 якщо коефіціенти A, B та C задані у вхідному файлі
Вміст файлу на мові awk sqrt.awk
{
a = 2 * $1;
b = $2;
c = $3;
d = b * b - 2 * a * c;
if (((a == 0) && (b == 0)) || (d < 0))
printf(" Unable to calculate ")
else
if (a == 0)
printf(" x = %f ", c / b)
else
if (d == 0)
printf(" x = %f ”, - b / a)
else
printf(" x1 = %f, x2 = %f ",
(- b - sqrt(d)) / a, (- b + sqrt(d)) / a)
}
Вміст файлу з UNIX-скріптом для запуску awk-програми sqrtcalc
awk -f sqrt.awk $1
Приклад роботи програми: нехай файл koef.txt містить таки коефіціенти:
10 -1
1 0 1
2 4 2
0 0 5
1 -3 2
01 -2
Набравши в командному рядку ‘sqrtcalc koef.txt’ отримаємо результат:
x1 = -1, x2 = 1
Unable to calculate
x = -1
Unable to calculate
x1 = 1, x2 = 2
x = 2
Теоретична частина. Загальні можливості мови awk
awk – інтерпретуюча мова програмування, що підтримується операційною системою UNIX. Виклик програми здійснюється командою awk –f program file, де program є назвою файлу з awk-програмою, а file – файл даних. Не порушуючи логіки системи UNIX команда awk забезпечує потоковий ввід-вивід. who | awk -f program означає, що як файл даних використовується результат виконання команди who. Синтаксис awk-програм схожий із синтаксисом мови Cі, найбільша різниця між awk та Сі заключається в тому, що змінні в awk не типівізовані як в BASIC або тип Variant в Delphi.
Текст програми пишеться у операторних дужках { } перед яким може стояти шаблон BEGIN або END. BEGIN означає, що дана частина коду виконується до початку обробки вхідних даних, END – після закінченя. Якщо шаблон не вказано, код виконується для кожного рядка з вхідного потоку.
BEGIN{ n = 1 }
{
a[n] = $1;
b[n] = $2;
n++
}
END{
for (i = 1; i <= n; i++)
printf(“a[i] + b[i] = %f\n”, a[i] + b[i])
}
В даному прикладі код {
a[n] = $1;
b[n] = $2;
n++
} виконається стільки разів, скільки рядків містить вхідний потік.
Арифметичні та логічні операції в awk:
awkPascal
z = x + yz := x + y
z = x – yz := x – y
z = x * yz := x * y
z = x / yz := x / y
z += yz := z + y
z = x % yz := x mod y
-=, *=, /=, %=Аналогічно
x++inc(x)
x--dec(x)
x && yx and y
x || yx or y
! xnot x
x == yx = y
x != yx <> y
x < yx < y
x > yx > y
x ~ yx in y
x = (w) ? y : zif w then x := y else x := z