cómo seleccionar de las columnas de dedo no estándar

Tengo un archivo que obtuve con el comando de dedo y quiero conservar solo el nombre, el apellido y el punto de acceso del usuario. El problema es que algunos usuarios están inactivos y tienen una columna adicional, por lo que la columna del punto de acceso no es estándar, por lo que puedo usar awk print $z.

¿Hay alguna manera de que pueda hacer eso?

Después pensé si podía seleccionar ese campo adicional y eliminarlo más tarde con sed or awk ¿pero cómo? Como puede ver, algunas líneas tienen el tiempo de inactividad que he seleccionado con el dedo y otras no hacen que los usuarios no hayan estado inactivos. Solo quiero mantener nombres, apellidos y puntos de acceso. ¡Gracias!

El archivo es así:

Name1 surname1 22:04 (athedsl-xxxxxxxxx.home.otenet.gr)
Name2 surname2 (xxxxxxxxxx.dsl.hol.gr)
.
.
.

y así...

preguntado el 03 de mayo de 12 a las 22:05

¿dedo? esto todavía está alrededor? que retroceso...-

4 Respuestas

No sé sed/awk, pero puedes hacer esto con una sola línea de perl:

cat file | perl -ne 'if (/(\w+)\s+(\w+).*\((.*)\)/) { print "$1 $2 $3\n" }'

Perl está en prácticamente todos los sistemas *nix en estos días, así que espero que funcione para usted. Con los datos que das, obtienes:

bob surname1 athedsl-xxxxxxxxx.home.otenet.gr
john surname2 xxxxxxxxxx.dsl.hol.gr

contestado el 03 de mayo de 12 a las 23:05

inténtalo de nuevo ahora que lo he editado, fui un poco demasiado literal con tus datos de ejemplo... - Benj

Aquí hay un par de formas:

awk '{gsub(/^\(|\)$/, "", $NF); print $1, $2, $NF}'

awk 'NF == 4 {$3 = ""}1'

El segundo deja los paréntesis en su lugar y deja un espacio adicional en lugar del tiempo de inactividad, si lo hay.

contestado el 04 de mayo de 12 a las 02:05

No estoy realmente familiarizado con el finger comando, pero creo que puedes resolver esto usando awk Me gusta esto:

finger | awk 'NR >= 2 { gsub ("[\\(|\\)]","",$NF); print $1"\t"$3"\t"$NF }'

HTH

contestado el 04 de mayo de 12 a las 00:05

Replace "\t" con , en la declaración de impresión si no le gustan los valores tab-sep. - Steve

Esto podría funcionar para ti:

finger | sed '/\([0-9]*:[0-9]*\s*\)\?(\([^)]*\))$/!d;s//\2/'
Name1 surname1 athedsl-xxxxxxxxx.home.otenet.gr
Name2 surname2 xxxxxxxxxx.dsl.hol.gr

contestado el 04 de mayo de 12 a las 00:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.