Передача cat / grep / arguments в переменную в скрипте bash - PullRequest
0 голосов
/ 13 февраля 2019
#!/bin/bash
DATE=`date +%Y-%m-%d`
HOUR=`date +%H`
ORDERS_THIS_HOUR=`cat cli.log | grep $DATE $HOUR | grep -o "generated for Production" | wc -l`
OUTPUT="$DATE $HOUR : $ORDERS_THIS_HOUR"

echo "$OUTPUT" >> flow_productivity.log

Проблема со второй строкой: grep: 14: No such file or directory.

Вот пример команды, результаты которой я хотел бы сохранить в $ORDERS_THIS_HOUR:

cat cli.log | grep "2019-02-13 12" | grep -o "generated for Production" | wc -l

Запуск из командной строки, приведенный выше производитожидаемый результат.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Во-первых - поскольку вы не ставите кавычки вокруг своих расширений, они передаются в качестве отдельных аргументов grep.Первым результатом разделения строк и глобализации $DATE $HOUR становится имя файла, по которому grep выполняется поиск, а последующие становятся именами файлов для поиска.

Кроме того, плохой идеей будет date вызывать больше, чемво всяком случае, один раз в том же сценарии.Что если ваш сценарий запускается по мере того, как время проходит в полночь?Первый звонок по номеру date может быть в конце одного дня, а второй - в самом начале следующего утра.Чтобы избежать этого риска, звоните date только один раз, как показано ниже:

now=$(date '+%Y-%m-%d %H')
msg="generated for Production"
orders_this_hour=$(grep -Ec "($now.*$msg|$msg.*$now)" <cli.log)
output="$now : $orders_this_hour"
echo "$output" >> flow_productivity.log
0 голосов
/ 13 февраля 2019

Это принимает $HOUR в качестве имени файла.Сделай это grep "$DATE $HOUR"

...