Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: garrulis en 30 Enero 2013, 19:32 pm



Título: [BASH] Borrar línea justo después del segundo ":". Análisis de log.
Publicado por: garrulis en 30 Enero 2013, 19:32 pm
No sabia si ponerlo aquí o en linux.

Bueno os cuento (como diría el guardián de las estrellas hahaha):

Vereis, estoy haciendo un análisis de logs.

Después de usar grep y cut, ya tengo todo el log casi limpito.

El problama me viene en lo siguiente.

Tengo el fichero de log, y necesito borrar (linea a linea, esto es importante) todo lo que haya a partir del segundo ":"

Ejemplo:

linea 1:
pericodelospalotes : pepitogrillo:larala

linea 2:
pericodelospalotesejemplo : pepitogrilloejemplo:larala

Deberia de quedar:

pericodelospalotes : pepitogrillo
pericodelospalotesejemplo : pepitogrilloejemplo



:larala fuera


¿Sabeis como leches se hacia?

Se que con awk se podia hacer, pero estoy bastante espeso. He buscado en google y en los apuntes que tenía de linux y no me aclaro y me urge :(

Muchas gracias!!





Título: Re: [BASH] Borrar línea justo después del segundo ":". Análisis de log.
Publicado por: fary en 30 Enero 2013, 21:41 pm
Pues hombre, obviamente con un script se puede hacer jeje pero para que quieres quitar en todas las lineas lo que va despues del segundo punto? y si lo que va despues en algun caso es un parametro importante?. Te recomiendo que lo vallas haciendo tu a mano y que envez de borrar información la vallas poniendo como comentario o bien crees un archivo de respaldo por si lo rompes  :rolleyes:

un saludo!


Título: Re: [BASH] Borrar línea justo después del segundo ":". Análisis de log.
Publicado por: -Myx- en 30 Enero 2013, 22:58 pm
Código
  1. $ cat /etc/passwd | cut -f1,2 -d':'
  2. $ cat /etc/passwd | awk -F': ' '{print $1":"$2;}'
  3. # Y si lo que necesitas son mas de un caracter de delimitador cambia a -F' : '


Título: Re: [BASH] Borrar línea justo después del segundo ":". Análisis de log.
Publicado por: garrulis en 30 Enero 2013, 23:14 pm
Muchas gracias -MyX- lo voy a probar y te comento a ver que tal me ha ido.

Exacto mDrinky, eso es, en todas las lineas, lo que va después del segundo ":", tengo que quitarlo.

A mano me pueden dar las uvas, y ni me acoradaba usando awk.

Lo pruebo a ver que tal.

Muchas gracias de nuevo.


Título: Re: [BASH] Borrar línea justo después del segundo ":". Análisis de log.
Publicado por: garrulis en 30 Enero 2013, 23:37 pm
-MyX- con

Código:
cat /etc/passwd | awk -F': ' '{print $1":"$2;}'

No funciona.

Con el "cut" parece ser que sí.


Título: Re: [BASH] Borrar línea justo después del segundo ":". Análisis de log.
Publicado por: garrulis en 31 Enero 2013, 11:40 am
Hola muchachos, me ha servido perfectamente.

Ahora el problema me viene, que no todas las lineas cumplen con esa condición

las lineas pares en el punto número 9 y en las impares es en el punto numero 8.

Si hago las lineas pares, no hay problema. El problema es con las impares, ya que al ser 8, me machaca más de la cuenta.

Un ejemplo:

1:2:3:4:5:6:7:8:9

Queda:

1:2:3:4:5:6:7:8


Hasta ahí todo bien. Pero cuando hago un:

Código:
cat fichero | cut -f1,2,3,4,5,6,7,8 -d':'

Me borra a partir del punto 8 hacia adelante (pero en todas las lineas, no en las impares, por lo cual no me sirve del todo).


Ahora, la pregunta del millón....

¿Hay alguna manera de decirle al "cut" que solamente haga "cut" en las lineas donde contenga la palabra "impar" y que a partir de ahí, solo donde vea la palabra "impar", haga el cut?

Muchas gracias!



Título: Re: [BASH] Borrar línea justo después del segundo ":". Análisis de log.
Publicado por: -Myx- en 31 Enero 2013, 15:19 pm
Código
  1. cat file | ... | while read line;do
  2.    impar="impar"
  3.    if grep -q $impar; then
  4.        echo $line | cut -f1,2,3 -d':'
  5.    else
  6.        echo $line | cut -f1,2,3,4 -d':'
  7.    fi
  8. done