проблема с переменными оболочки в awk - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть команда, которая успешно выполняется в командной строке:

ls -l | awk '/Sep 26/{split($8,a,":");if(a[1]a[2]>=1045 && a[1]a[2]<=1145)print $9}'

Я включаю то же самое в скрипт ниже:

#!/bin/ksh

date1=$1
date2=$2
time1=$3
time2=$4
ls -l| awk -v d1=${date1} -v d2=${date2}  -v t1=${time1} -v t2=${time2} '/d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 && a[1]a[2]<=t2) print $9}'

Но это не работает. Пожалуйста, смотрите ниже исполнение

ksh -vx test.sh Sep 26 1045 1145
#!/bin/ksh

date1=$1
+ date1=Sep
date2=$2
+ date2=26
time1=$3
+ time1=1045
time2=$4
+ time2=1145
ls -l| awk -v d1=${date1} -v d2=${date2}  -v t1=${time1} -v t2=${time2} '/d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}'
+ awk -v d1=Sep -v d2=26 -v t1=1045 -v t2=1145 /d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}
+ ls -l
awk: syntax error near line 1
awk: bailing out near line 1

Я использую ОС Solaris: я попытался с nawk, но ошибки нет, но нет и вывода.

pearl[ncm_o11.2_int.@].293> ksh -vx test.sh Sep 26 1045 1145
#!/bin/ksh

date1=$1
+ date1=Sep
date2=$2
+ date2=26
time1=$3
+ time1=1045
time2=$4
+ time2=1145
ls -l| nawk -v d1=${date1} -v d2=${date2}  -v t1=${time1} -v t2=${time2} '/d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}'
+ ls -l
+ nawk -v d1=Sep -v d2=26 -v t1=1045 -v t2=1145 /d1 d2/{split($8,a,":");if(a[1]a[2]>=t1 &&a[1]a[2]<=t2)print $9}

Когда я выполняю без переменных оболочки внутри script.its, выполняется отлично.

* Примечание: * Я использую ОС Solaris.

Я выяснил, что проблема заключается в последней команде внутри скрипта:

ls -l|nawk -v d1=Sep -v d2=26 -v t1=1045 -v t2=1145 '/d1 d2/{split($8,a,":");if(a[1]a[2] >=t1 && a[1]a[2]<=t2)print $9}'

Но я не уверен, почему это не дает правильного вывода с флагами -v

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Как уже предлагалось, если вам нужно динамическое регулярное выражение, вам нужно использовать $0 ~ d1 " " d2 вместо /d1 d2/.

0 голосов
/ 26 сентября 2011

Какая операционная система? Возможно, что при интерактивном запуске команды awk указывает на другую реализацию awk . Например, если вы используете Solaris , попробуйте запустить скрипт с nawk (или gawk ) вместо awk .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...