2012-03-19 2 views
1

Я получаю синтаксические ошибки со следующим кодом. Есть ли awk-версия, которая не поддерживает параметр -v, или я что-то упускаю? Благодарю.awk: передача переменных из bash

#!/usr/local/bin/bash 
f_name="crap.stat" 
S_Date="2012-02-10" 
E_Date="2012-02-13" 

awk -F "\t" -v s_date="$S_Date" -v e_date="$E_Date" 'BEGIN {print s_date,e_date}' $f_name 
+0

Какова синтаксическая ошибка? –

+0

awk: ошибка синтаксиса рядом с строкой 1 awk: спасение возле линии 1 –

+1

Какова ваша версия awk? и системный конфиг? –

ответ

1

Ваш код полностью работает на моем awk (GNU Awk 3.1.6).

Существует еще один способ, хотя, если вы экспортировать переменные, которые вы можете использовать его в ENVIRON массиве

$ export f_name="crap.stat" 
$ awk '{ print ENVIRON["f_name"] }' anyfile 
crap.stat 
+0

Спасибо, но я получаю ошибку даже без входного файла: awk - v sdate = "$ S_Date" 'BEGIN {print sdate}' –

+1

В awks, которые не поддерживают '-v sdate = value '...'', вы можете сделать это: 'awk '...' sdate = value'. Недостатком является то, что присваивание не будет видно внутри правила 'BEGIN {...}', но только один раз awk начинает обрабатывать свои ARGV. – dubiousjim

1

Программа по умолчанию awk на Solaris 10 (он же oawk), кажется, не поддерживает опцию -v; Альтернативная программа nawk действительно поддерживает ее. Некоторые люди меняют имя awk, так что это ссылка на nawk, так что вы не можете с готовностью предсказать, что вы найдете как awk.

В awk программы на HP-UX 11.x, AIX 6.x и Mac OS X (10.7.x) все поддерживают -v обозначения, что не очень удивительно, так как POSIX ожидает поддержку -v.

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