Obter linhas entre dois timestamps de um arquivo

4

Eu tenho esse arquivo grande que preciso passar usando data e hora. Cada linha neste arquivo tem uma data e hora.

Eu preciso procurar nas linhas e obter as linhas que estão entre duas datas e horas específicas.

Arquivo de exemplo (o campo para data e hora é $ 2 e $ 3):

SERVER 2015-12-12 05:00:20 some_text_here something  
SERVER 2015-11-02 12:22:40 some_text_here something
SERVER 2015-12-11 20:00:00 some_text_here something
SERVER 2015-12-11 23:00:00 some_text_here something
SERVER 2015-12-12 00:30:00 some_text_here something
SERVER 2015-12-12 00:59:00 some_text_here something
SERVER 2015-09-20 03:28:11 some_text_here something
SERVER 2015-04-16 04:49:59 some_text_here something

O comando que tentei (os usuários precisam fornecer 4 argumentos ao executar o script):

AAA="$1 $2"
BBB="$3 $4"

awk '$2" "$3>="'"$AAA"'" && $2" "$3<="'"$BBB"'"' file.txt > newfile.txt

Estou usando as linhas acima como um script, mas não está funcionando.

newfile.txt deve conter (usando argumentos 2015-12-11 20:00:00 2015-12-12 01:00:00 ):

SERVER 2015-12-11 20:00:00 some_text_here something
SERVER 2015-12-11 23:00:00 some_text_here something
SERVER 2015-12-12 00:30:00 some_text_here something
SERVER 2015-12-12 00:59:00 some_text_here something
    
por capslock13 13.04.2016 / 06:12

3 respostas

0

Talvez você precise de um script para inserir as duas datas e horas específicas.

Código:

#!/bin/bashif[$#-ne4];thenexit0fiAAA=$1" "$2
BBB=$3" "$4
awk -v begintime="${AAA}" -v endtime="${BBB}" '$2" "$3>=begintime && $2" "$3<=endtime' exa > newfile.txt
    
por 13.04.2016 / 11:02
3

O único problema real é atribuir a $AAA e $BBB em vez de AAA e BBB . Então, se você fizer (quase o mesmo que o seu código):

AAA="2015-12-11 20:00:00"
BBB="2015-12-12 01:00:00"
awk '$2" "$3>="'"$AAA"'" && $2" "$3<="'"$BBB"'"' file.txt > newfile.txt

já deveria funcionar. Mas eu recomendo as seguintes mudanças adicionais para reduzir potenciais problemas de citação (especialmente se você reutilizar este apprach em outro lugar ou colocar caracteres especiais em AAA ou BBB ):

AAA="2015-12-11 20:00:00"
BBB="2015-12-12 01:00:00"
awk -v string1="$AAA" -v string2="$BBB" '$2" "$3>=string1 && $2" "$3<=string2' file.txt > newfile.txt

Você pode ler sobre -v na página man de awk .

    
por 13.04.2016 / 06:57
-1

awk não é a melhor ferramenta.

sed -e  "/^$AAA/,/^$BBB/,p" file.txt

e man sed .

    
por 13.04.2016 / 06:54