Linux/Unix Shell Scripting - Paso de un ejercicio de shell script a awk

 
Vista:
sin imagen de perfil

Paso de un ejercicio de shell script a awk

Publicado por Alejandro (2 intervenciones) el 11/03/2014 11:40:45
Hola, me gustaría saber si me podíais echar una mano con el 2º ejercicio:

EJERCICIO 1
El comando ps empleado con las opciones –awxl vuelca a la salida estándar, separando por varios espacios, diversa información de todos los procesos del sistema operativo (consultar el manual en línea para identificar dicha información):

Sin utilizar awk, realizar un shell-script lista_procesos_usuarios que, basándose en el comando ps anterior, muestre para cada una de los UIDs pasados como argumento del script, los procesos pertenecientes al UID correspondiente, por orden de PID de menor a mayor. En la salida deberán aparecer únicamente el UID, PID, PPID y COMMAND de cada proceso. Por ejemplo:
$prompt> ./lista_procesos_usuarios 0 500

Usuario 0:
UID PID PPID COMMAND
0 1 0 init[2]
0 2 0 [kthreadd]
0 3 2 [migration/0]
...

NOTA1: La salida del Shell-script debe tener exactamente el mismo formato que el mostrado arriba.
Consejo: Para poder procesar correctamente el comando ps y quedarse con la información que se necesita se recomienda pasar la salida de dicho comando por el comando tr –s " " que nos permitirá obtener a la salida todos los campos del ps separados por un único espacio en blanco. Por ejemplo:
$prompt> ps awxl | tr –s " "

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
SOLUCIÓN AL EJERCICIO 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
 
if test $# -eq 0
then
	echo "El numero de parametros es incorrecto"
	echo "USO: lista_procesos_usuarios <UID1> <UID2> ..."
	exit 1
else
	for i in $*
	do
		if grep :$i: /etc/passwd > /dev/null
		then
			var=$(ps awxl | tr -s " " | grep ^." "$i" ".*  | cut -d" " -f 2,3,4,13 | sort -nk 2)
			echo " "
			echo "Usuario $i:"
			echo "UID PID PPID COMMAND"
			echo "$var"
		else
			echo " "
			echo "El usuario $i no pertenece al sistema"
		fi
	done
	exit 0
fi

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
EJERCICIO 2
Realizar, utilizando AWK, el mismo Shell-script que el problema 1 pero mostrando de cada usuario únicamente los procesos con VSZ mayor o igual que la cantidad indicada en el primer parámetro del Shell-script. Por ejemplo:
$prompt> ./lista_procesos_usuarios 4096 0 500
NOTA1: La salida del Shell-script debe tener exactamente mismo formato que el mostrado en el problema 1.
NOTA2: Es obligatorio que el programa AWK esté implementado en un fichero propio y aparte del Shell- script llamado lista_procesos_usuarios.awk
Consejo: Para poder procesar correctamente el comando ls con el AWK se recomienda pasar la salida de dicho comando por el comando tr –s " " que nos permitirá obtener a la salida todos los campos del ls separados por un único espacio en blanco. Por ejemplo:
$prompt> ps awxl | tr –s " "


Mi duda, es como pasarlo a awk, e incorporar lo de VSZ.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Paso de un ejercicio de shell script a awk

Publicado por Tom (361 intervenciones) el 13/03/2014 08:54:33
1
2
3
4
5
6
7
8
9
10
if test $# -lt 2
then
  echo "El numero de parametros es incorrecto"
  echo "USO: lista_procesos_usuarios <VSZ> <UID1> <UID2> ..."
  exit 1
else
  TVSZ=$1
  shift
  for i in $* do
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Paso de un ejercicio de shell script a awk

Publicado por alexgp555 (1 intervención) el 18/03/2014 02:47:03
Hola, la verdad es que entiendo lo que has puesto, pero soy incapaz de hacerlo entero.
Me cuesta mucho pasarlo a awk.
¿Me puedes echar una mano?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar