multiline em linha única e saída para logger

1

Eu tenho um arquivo de log onde as entradas de dados são as seguintes: Cada entrada começa com o tempo:

time: 20170509123420
dn: uid=abc,ou=People,dc=test,dc=example,dc=com
changetype: modify
replace: passwordAllowChangeTime

replace: passwordExpirationTime

replace: passwordRetryCount

replace: pwdpolicysubentry

replace: modifiersname
modifiersname: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot
replace: modifytimestamp
modifytimestamp: 20170509113420Z

time: 20170509123621
dn: cn=nsPwPolicyContainer,dc=test,dc=example,dc=com
changetype: add
objectClass: nsContainer
objectClass: top
cn: nsPwPolicyContainer
creatorsName: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot
modifiersName: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoo

Agora quero imprimir como linha única, apenas as entradas entre a hora :. Por exemplo, depois do tempo:, eu quero imprimir todos os registros como uma única linha, então no meu caso, deve imprimir como

time: 20170509123420 dn: uid=abc,ou=People,dc=test,dc=example,dc=com changetype: modify replace: passwordAllowChangeTime - replace: passwordExpirationTime - replace: passwordRetryCount - replace: pwdpolicysubentry - replace: modifiersname modifiersname: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoo t - replace: modifytimestamp modifytimestamp: 20170509113420Z

Eu tentei com o comando abaixo, ele está sendo exibido na tela, mas ao tentar redirecionar / anexar, ele não está funcionando.

tailf /var/log/dirsrv/slapd-ldap/audit | awk '/^time:/ {if (NR!=1)print"";printf $0}{printf $0}END{print"";}' | logger 

Existe algum comando para fazer isso?

    
por kathir 09.06.2017 / 17:12

1 resposta

1

Talvez você possa tentar algo assim:

awk '/^time:/ { print "\n" } { printf "%s ",$0 }' /var/log/dirsrv/slapd-ldap/audit > logger
    
por 06.08.2017 / 03:43

Tags