Взагалі кажучи, чим більш спеціалізований інструмент, тим швидше він. Тож у більшості випадків можна очікувати cut
і grep
швидшого sed
, і sed
швидшого, ніж awk
. Якщо ви порівнюєте більш довгі конвеєри простіших інструментів з одним викликом більш складного інструменту, не існує жодного принципу. Це стосується лише великих вкладів (скажімо, мільйонів рядків); для коротких входів різниці ви не побачите.
Перевага більш складних інструментів - це, звичайно, те, що вони можуть робити більше речей.
Ваші команди непотрібно використовують кішку. Використовуйте натомість переадресацію (особливо якщо ви переживаєте за швидкість, хоча, швидше за все, ви не повинні турбуватися про швидкість, поки не запустите контрольні показники¹).
<fileName awk '/WORD/ { print $2 }'
<fileName grep WORD | cut -f 2 -d ' '
Ці команди майже рівноцінні. Відмінності:
- У awk і grep є різні синтаксиси regexp . Awk і
grep -E
мають майже однакові синтаксиси regexp (розширені регулярні вирази).
cut -d ' '
розглядає кожного окремого космічного символу як роздільник. Розмежувачем за замовчуванням Awk є будь-яка послідовність пробілів, яка може бути декількома пробілами, вкладкою тощо. Ви не можете використовувати довільні послідовності пробілів як роздільники cut
. Для того, щоб використовувати окремі прогалини в якості роздільників в AWK, встановіть роздільник полів в регулярний вираз , яке відповідає єдиний простір, крім регулярного виразу , що складається з одного простору (яке є окремим випадком означає «будь-яка послідовність прогалин», тобто за замовчуванням): awk -F '[ ]' '/WORD/ {print $2}'
.
¹ Перше правило оптимізації програми: не робіть цього. Друге правило оптимізації програми (лише для експертів!): Не робіть цього ще. - Майкл А. Джексон
echo filename
чиcat filename
?