Предположим, я написал этот скрипт:
#print_time..
cat <file1.txt> | grep "*.log" | head -4 | tail -2 | helper | sort -r -n -k2
#helper..
while read line; do
linearr=($line)
(( time =${line[2]} - ${line[1]} +0 ))
echo ${line[o]} $time
done
два вопроса: 1) почему первый скрипт работает так, как и ожидалось, только когда я пишу его так:
cat `cat <file1.txt> | grep "*.log" | head -4 | tail -2` helper | sort -r -n -k2
2) Стоит ли использовать grep "*.log"
или grep ".log"?
Что делает скрипт:
учитывая файл file1, мы хотим прочитать только 2 файла журнала, когда последний из них имеет номер 4 среди всех файлов .log в данном файле file1: пример:
Я хочу, чтобы первая часть скрипта читала: tuesday.log и wednesday.log, а затем вычисляла время каждого входа в систему для каждого человека, чье имя есть в файлах входа в систему:
и это будет распечатано:
решение1
Отвечая на ваш вопрос, проблема заключается в вашем использовании grep
.
Grep воспринимает то, что вы вводите, как литерал, поэтому, если вы выполните grep с *.log
, он будет активно искать символ «звездочка», *
за которым следует .log
, поэтому ничего не найдет.
В качестве быстрого теста,
Команда echo hello.log | grep "*.log"
ничего не вернет.
Команда echo hello.log | grep ".log"
вернет строку