2014-09-26 5 views
1

Мне нужно выполнить вычисление абсолютного значения в awk.awk: функции автоматического вызова из файла

Но абсолютное значение не встроено в awk, так что многие из моих awk команды выглядят следующим образом:

awk 'function abs(x){return ((x < 0.0) ? -x : x)} { ...calls to "abs" .... }' file 

Есть ли способ, чтобы сохранить определенный пользователь awk функции в файлах, и имеет awk автоматически загружать эти функции, когда он называется?

Что-то вроде настройки awk «включить» путь или профиль пользователя, как и для bash и других программ.

+5

https: // WWW .gnu.org/программное обеспечение/простак/ручной /html_node/Include-Files.html#Include-Files – Basilevs

+0

Как указано в ссылке @Basilevs, вы можете использовать файл '@include" для импорта файлов. –

+1

Я думаю, вы могли бы также псевдоним 'awk'' awk -i funcs.awk' –

ответ

2

0 Вы можете использовать @include "file", чтобы импортировать файлы.

например. Создайте файл с именем func_lib:

function abs(x){ 
    return ((x < 0.0) ? -x : x) 
} 

Затем включить его с awk:

awk '@include "func_lib"; { ...calls to "abs" .... }' file 
+0

, но тогда я должен делать это каждый раз ... я полагаю, что комментарий Марка Сетчелла лучше всего – cmo

+1

Для вашего конкретного использования, возможно, это лучше всего. Это зависит от того, как вы хотите называть 'awk'. Это может иметь смысл включать его только для определенных программ 'awk', которым нужны внешние функции. Кроме того, если использовать скрипт 'awk', представляется более целесообразным делать все' @ include 'сверху, а не передавать каждый в аргумент командной строки' -i'. –

1

попробовать Также

$ cat function_lib.awk 
    function abs(x){ 
     return ((x < 0.0) ? -x : x) 
} 

вызов функции, как это

$ awk -f function_lib.awk --source 'BEGIN{ print abs(-1)}' 
Смежные вопросы