[BASH] Borrar línea justo después del segundo ":". Análisis de log.

Iniciado por garrulis, 30 Enero 2013, 19:32 PM

0 Miembros y 1 Visitante están viendo este tema.

garrulis

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!!




fary

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!
Un byte a la izquierda.

-Myx-

Código (bash) [Seleccionar]
$ cat /etc/passwd | cut -f1,2 -d':'
$ cat /etc/passwd | awk -F': ' '{print $1":"$2;}'
# Y si lo que necesitas son mas de un caracter de delimitador cambia a -F' : '

garrulis

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.

garrulis

-MyX- con

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

No funciona.

Con el "cut" parece ser que sí.

garrulis

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:

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!


-Myx-

Código (bash) [Seleccionar]
cat file | ... | while read line;do
    impar="impar"
    if grep -q $impar; then
        echo $line | cut -f1,2,3 -d':'
    else
        echo $line | cut -f1,2,3,4 -d':'
    fi
done