extraindo campo de data das linhas

1

Eu tenho um arquivo como este

Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10

Eu preciso extrair o campo date e adicionar essa data como coluna com delimitado ($). A data pode estar presente em qualquer lugar no arquivo.

[Fri Jun 10 06:11:59 2016]$Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
[Fri Jun 11 06:11:59 2016]$Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10
    
por Naresh 01.08.2016 / 22:47

1 resposta

2

Supondo que a data esteja sempre entre [ ... ] e esse é o primeiro [ na linha, podemos usar vários métodos. Dois comuns eu uso:

Usando dois comandos cut (a opção lenta, mas é muito fácil entender o que ela faz):

cut -d'[' -f2 $srcfile | cut -d ']' -f1

A opção padrão sed , usando uma regex simples:

sed 's/.*\[\([^]]*\)].*//' $srcfile

Se a sua saída for mais complicada com vários caracteres [ , você precisará usar a opção sed com uma string mais complicada:

sed 's/.*\[\(... ... .. ..:..:.. ....\)].*//' $srcfile

EDIT: A questão revisada quer isso adicionado à frente da string, deixando o resto da linha intocada. Então, usamos a variante sed com uma pequena alteração:

sed 's/\(.*\[\(... ... .. ..:..:.. ....\)].*\)/[]$/' $srcfile

Resultado:

[Fri Jun 10 06:11:59 2016]$Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
[Fri Jun 11 06:11:59 2016]$Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10
    
por 01.08.2016 / 23:08