2014-10-22 3 views
0

Как использовать awk в файле bash?Awk из файла

Я знаю, как сделать это в командной строке с

awk `{...}` 

Но как я это место в файле Баш.

Это то, что я делаю прямо сейчас

awk 

Begin 
{ 

    ... 
} 
{ 
    ... 
} 
END 
{ 
    ... 
} 

Что я упускаю из синтаксиса?

+0

ли Вы хотите включить сценарий awk в соответствии с остальной частью сценария bash или вызвать отдельный скрипт? Первое удобно для коротких awk-скриптов, тогда как второе лучше для вещей, которые сложнее. –

+0

Прямо сейчас я пытаюсь включить его в строку сценария bash. – jax

+0

Какая ошибка у вас возникла? –

ответ

3

Просто добавьте это нормально, такие, как это:

awk '...' file 

Обратите внимание, что, вместо этого, вы использовали

awk `{ ... }` file 

Также обратите внимание BEGIN и END блоки необходимо открывающую фигурную скобку, чтобы быть в том же линия. В противном случае вы получите сообщение об ошибке, как это:

awk: cmd. line:2: BEGIN blocks must have an action part

Использование BEGIN, не Begin.


Смотрите полный рабочий пример:

$ cat a 
#!/bin/bash 

echo "we received file: $1" 

awk 'BEGIN {print "-entering in awk script"} 
    {print $1, $3} 
    END {print "-that was it"}' $1 

И это файл, который мы обеспечим:

$ cat b 
hello this is a test 
and this another text 

И мы выполняем это:

$ ./a b 
we received file: b 
-entering in awk script 
hello is 
and another 
-that was it 
+0

Я могу это сделать, но когда я поместил фигурные скобки на отдельные линии, это дает мне ошибку. – jax

+1

@agentNil Вы положили одинарные кавычки вокруг всего этого? –

+0

Да, но я все еще получаю ошибки. – jax

1

Если скрипт сложный t вы можете создать файл сценария и добавить к нему права запуска. Использование fedorqui «S примера файла x.awk может выглядеть так:

#!/bin/awk -f 

BEGIN {print "-entering in awk script"} 
{print $1, $3} 
END {print "-that was it"} 

Тогда chmod 700 x.awk, а затем можно использовать x.awk как обычные утилиты:

#!/bin/bash 
./x.awk input_file.txt 
+0

Не нужно 'chmod' и т. Д.' Awk' сам может обрабатывать его с помощью: 'awk -f x.awk input_file.txt'. – fedorqui

+1

@fedorqui: Вы правы! В этом случае '#!/Bin/awk -f' также можно отбросить. Но я предпочел бы версию runnable script, поскольку ее можно было бы переписать в perl' (если скрипт 'awk' стал слишком сложным) без каких-либо изменений в скрипте вызывающего. – TrueY

+0

Yup! Кроме того, я обычно использую 'chmod + x file' для предоставления разрешения на выполнение вместо явно' chmod 700'. Но это зависит только от каждого. Во всяком случае, +1! – fedorqui

Смежные вопросы