Establezca el parámetro del comando sed para un rango de tiempo

Establezca el parámetro del comando sed para un rango de tiempo

Este es mi archivo de registro de muestra que me gusta extraer de un archivo de registro muy grande.

2017-05-30 23:11:34,629 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking auth agent [accountName=rene1 remoteAddress=STEDGE/172.16.8.3]
2017-05-30 23:11:14,638 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - SSH: Failed login attempt on [172.16.8.1]. Username: "rene1".
2017-05-30 23:10:54,663 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.KeyboardInteractiveAuthentication - SSH: Sent SSH_MSG_USERAUTH_INFO_REQUEST (Password Authentication): 
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - User login attempt has been made from address /172.16.8.1:58222
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking config agent [accountName=rene1 remoteAddress=/172.16.8.1]
2017-05-30 23:10:36,446 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Config agent success [accountName=rene1 remoteAddress=/172.16.8.1]



Me gustaría extraer todo el fragmento de registro 23:10:36para 23:11:34usarlo, sedpero falla. Me había hecho la prueba grepy awkno tenía esperanzas de obtener el resultado esperado. Solo me da el registro ocurrido dentro del 23:10:36cual no es el resultado esperado. Este es mi comando

sed -n '/23:10:36/,/23:11:34/p' stlog.txt



¿Alguien sabe cómo hacer que esto funcione? solo contiene hora sin fecha porque mi programa obtendrá solo la hora actual del sistema y consultará la base de registro solo en la hora actual del sistema.

Respuesta1

Puedo ver dos problemas aquí: 1) el registro parece estar en orden inverso, 2) tiene varias líneas que coinciden con el patrón "final".

(Aunque la línea final tiene 23:10:36,446, que es posterior a 23:10:36,415 en la penúltima línea)

Con el orden inverso, solo obtienes las líneas que coinciden, 23:10:36ya que sedcomienza a imprimir cuando ve eso y continúa hasta que ve 23:11:34, que no está allí.

Invertir los patrones (como se muestra a continuación) parecería una solución, pero aún así solo obtendrías la primera línea que coincide con el patrón final, ya que la impresión se detiene cuando ese patrón se ve por primera vez.

sed -n '/23:11:34/,/23:10:36/p' stlog.txt

Aquí hay una awksolución que debería poder solucionar ese problema:

awk -vstart="23:11:34" -vend="23:10:36" \
  '$0 ~ start {p=1} $0 ~ end {e=1} e && $0 !~ end {p=0} p' stlog.txt 

La variable pcontrola la impresión y se borra solo después de que se ve el patrón "final" ( ees 1)yla línea actual ya no coincide con ese patrón.

información relacionada