cómo seleccionar de las columnas de dedo no estándar
Frecuentes
Visto 88 veces
0
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í...
4 Respuestas
1
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
1
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
0
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
0
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 file bash sed awk or haz tu propia pregunta.
¿dedo? esto todavía está alrededor? que retroceso...- nhed