Использование параметров сценария оболочки с двоеточиями в awk - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть файл, который содержит строки в следующем формате:

2011/09/14 12:00:23.525 text

Я написал скрипт оболочки, который ищет данное выражение в текст и сортирует все соответствующие строки по дням и времени. В конце я хотел бы отменить записи, относящиеся к моменту, который старше, чем тот, который передан в качестве параметра. Я использую awk для такой фильтрации. Сценарий выглядит так:

search=$1  file=$2  day=$3  time=$4
zgrep -h "$search" $file | sort -k1,1 -k2,2 | awk -v da="$day" ti="$time" '($1 >= day) && ($2>= ti) {print $0}' > out.$$

Если я призываю:

myScript searchThis file1.txt 2011/09/20 09:16:52.130 

Я получаю эту ошибку:

awk: ti=09:16:52.130
awk:      ^ syntax error

Не могли бы вы помочь мне решить эту проблему? Большое спасибо! Bye

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Можете ли вы обернуть значение параметра в "?Я проверял это в bash и zsh, оба работали:

kent$  cat a
2011/09/20 09:16:52.130 
2011/08/20 10:16:52.130 
2011/07/20 05:16:52.130

kent$  d="2011/08/30 00:23:23"   #here used ".." to wrap the date and time

kent$  awk -v d="$d" '$0>d' a
2011/09/20 09:16:52.130

, не знаю, помогает ли это ...

0 голосов
/ 26 июня 2015

Ответ Кента не сработал для меня. Я использую GNU Awk 4.1.3 в Cygwin.

В конце концов я нашел это awk: передача переменных из bash , где dubiousjim упомянул, что вы можете указать значение переменной после действия. Это не будет доступно в правиле BEGIN, но для моего случая это было нормально.

Так что вы можете изменить свой скрипт на что-то вроде:

search=$1  file=$2  day=$3  time=$4
zgrep -h "$search" $file | sort -k1,1 -k2,2 | awk '($1 >= day) && ($2>= ti) {print $0}' da="$day" ti="$time" > out.$$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...