В чем разница между выполнением cat и только piping?

В чем разница между выполнением cat и только piping?

Предположим, я написал этот скрипт:

#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"вернет строку

Связанный контент