Eu tenho um arquivo com o seguinte padrão de repetição:
date
line 1
line 2
...
line x
Exemplo:
10/30/2016 12:10:00
xxx 123
yyy 456
zzz 789
10/30/2016 12:20:00
xxx 234
yyy 567
zzz 890
Como posso marcar cada linha com a data correspondente, ou seja:
10/30/2016 12:10:00
10/30/2016 12:10:00 xxx 123
10/30/2016 12:10:00 yyy 456
10/30/2016 12:10:00 zzz 789
10/30/2016 12:20:00
10/30/2016 12:20:00 xxx 234
10/30/2016 12:20:00 yyy 567
10/30/2016 12:20:00 zzz 890
Acho que deveria ser possível com o AWK, mas não tenho muita experiência com isso. Desde já, obrigado!
Responder1
Uma possibilidade é fazer assim:
awk '/^[[:digit:]/]+[[:space:]]+[[:digit:]:]+/ {d=$1 " " $2; print; next; } /[^[:space:]]/ { print d " " $0 }'
que corresponderá a qualquer sequência de dígitos e /
seguido por alguns espaços e depois uma série de dígitos e :
s, que deve corresponder à nossa data. Se encontrarmos um, salvamos os dois primeiros campos em uma variável, d
depois imprimimos esta linha e seguimos em frente. Então, sempre que encontrarmos uma linha que tenha pelo menos um caractere que não seja espaço (já que você parece estar eliminando as linhas em branco no seu exemplo), imprimiremos o valor atual na d
linha atual.