Qual é a diferença entre fazer gato e apenas encanar

Qual é a diferença entre fazer gato e apenas encanar

suponha que eu escrevi este script:

#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

duas perguntas: 1) por que o primeiro script funciona conforme o esperado apenas quando eu o escrevo assim:

cat `cat <file1.txt> | grep "*.log" | head -4 | tail -2`  helper | sort -r -n -k2 

2) Devo usar grep "*.log"ou grep ".log"?

O que o script faz:

dado um arquivo1, queremos ler apenas 2 arquivos de log quando o último for o número 4 de todos os arquivos .log no arquivo1 fornecido: exemplo:

insira a descrição da imagem aqui

Quero que a primeira parte do script leia: tuesday.log e quarta-feira.log e depois calcule o horário de cada horário de log de cada pessoa cujo nome está nos arquivos de log: insira a descrição da imagem aqui

e isso será impresso:

insira a descrição da imagem aqui

Responder1

Para responder à sua pergunta, o problema está no uso do grep.

Grep considera o que você colocou como literal, portanto, se você usar grep com *.log, ele procurará ativamente pela estrela do caractere *seguida por .log, portanto não encontrará nada.

Como um teste rápido,

O comando echo hello.log | grep "*.log"não retornará nada

O comando echo hello.log | grep ".log"retornará a linha

informação relacionada